:
, some_async_call();
: async function some_async_call() { ... }
, Promise
, , value
: value.then( function(result) { } )
:
async function some_async_call() {
if (theMoonIsInTheRightPosition)
return Fetch('/api/data/')
return false;
}
2 :
function parentFunction(callback) {
var promise = some_async_call();
promise.then( callback );
return ...;
}
async function asyncParentFunction( callback ) {
var value = await some_async_call();
if (value)
callback( value );
return value;
}
, , ... .
:
, promises, async/await
function doStuff(callback) {
var result = 100;
callback(result);
}
doStuff( function(data) { console.log('Im done!', data); } );
promises
function doStuff() {
return new Promise(function(resolve, reject) {
var result = 100;
resolve(result);
});
}
doStuff.then(function(data) { console.log('Im done!', data); });
/Await
function doStuff() {
return new Promise(function(resolve, reject) {
var result = 100;
resolve(result);
});
}
(async function() {
var data = await doStuff();
console.log('Im done!', data);
})();
: promises async/await .
:
function fetchUserWithPosts(userId, callback) {
fetchUser(userId, function(user) {
fetchPostsByUserId(userId, function(posts) {
callback({
user: user,
posts: posts
});
});
});
}
promises
function fetchUserWithPosts(userId) {
return Promise.all([
fetchUser(userId),
fetchPostsByUserId(userId)
]).then(function(result) {
return {
user: result[0],
posts: result[1]
};
});
}
/Await
async function fetchUserWithPosts(userId) {
return {
user: await fetchUser(userId),
posts: await fetchPostsByUserId(userId);
};
}