diff --git a/src/content/resources/language/javascript/promises/converting-a-callback.md b/src/content/resources/language/javascript/promises/converting-a-callback.md index 48967a4..5459606 100644 --- a/src/content/resources/language/javascript/promises/converting-a-callback.md +++ b/src/content/resources/language/javascript/promises/converting-a-callback.md @@ -6,6 +6,9 @@ title: Converting a callback recommended_reading: - javascript/promises/intro - javascript/promises/async-await +external_resources: + - text: util.promisify(original) + href: "https://nodejs.org/api/util.html#util_util_promisify_original" --- It's still pretty common to be forced to use an API that doesn't support promises. While a promise API is often preferred, it's not always available. @@ -61,3 +64,19 @@ const weather = await getWeatherAsync("Los Angeles").catch((error) => { console.log(weather); ``` + +In Node.js >v8.0.0 you can make use of the built-in `util` package which exposes a +[promisify](https://nodejs.org/api/util.html#util_util_promisify_original) method. This method helps us convert our original function to a promise-based function so that it returns the callback. + +Using our example from earlier, we can write it as: + +```js +const util = require("util") + +const getWeatherAsync = util.promisify(getWeather) + +const weather = await getWeatherAync("Los Angeles").catch(console.log) +console.log(weather) +``` + +**Note:** the `promisify` method adds a extra argument to the arguments you passed in. In this case we are calling the custom function with a single parameter of type `String`, which means the original function should also accept `(String, Function)`, `Function` being the callback `(error, result)`.