mirror of
https://github.com/Stone-Red-Code/website.git
synced 2026-09-04 09:15:58 +02:00
Merge pull request #258 from the-programmers-hangout/content-resources-javascript-callback-to-promise
content(resources): add resource about converting a callback to a promise
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
---
|
||||
authors:
|
||||
- "veksen#1060"
|
||||
created_at: "2020/05/20"
|
||||
title: Converting a callback
|
||||
recommended_reading:
|
||||
- javascript/promises/intro
|
||||
- javascript/promises/async-await
|
||||
---
|
||||
|
||||
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.
|
||||
|
||||
Before anything check:
|
||||
|
||||
- If your library might support both callbacks and API, in the documentation, or README from Github
|
||||
- If there is not another library that does the same thing, but supports promises.
|
||||
|
||||
## From a callback
|
||||
|
||||
Let's look at a conventional, but fictional callback API:
|
||||
|
||||
```js
|
||||
getWeather("Los Angeles", (error, result) => {
|
||||
if (err) throw err;
|
||||
|
||||
console.log(result); // "sunny"
|
||||
});
|
||||
```
|
||||
|
||||
## To a promise
|
||||
|
||||
If we want to use it as a promise, we'll need to wrap a promise around it:
|
||||
|
||||
```js
|
||||
function getWeatherAsync(city) {
|
||||
return new Promise((resolve, reject) => {
|
||||
getWeather(city, (error, result) => {
|
||||
if (err) reject(err);
|
||||
|
||||
resolve(result);
|
||||
});
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
Which we can now use:
|
||||
|
||||
```js
|
||||
getWeatherAsync("Los Angeles")
|
||||
.then((weather) => {
|
||||
console.log(weather);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
// or using async/await
|
||||
const weather = await getWeatherAsync("Los Angeles").catch((error) => {
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
console.log(weather);
|
||||
```
|
||||
Reference in New Issue
Block a user