【发布时间】:2019-05-05 13:12:49
【问题描述】:
我的代码:
回调:
const first = () => {
console.log('first');
};
const second = (callback) => {
setTimeout(() => {
console.log('second');
callback();
}, 2000);
};
const third = () => {
console.log('third');
};
first();
second(third); OUTPUT: 'first', 'second', 'third'
承诺:
const first = () => new Promise((resolve, reject) => {
resolve('first');
});
const second = () => new Promise((resolve, reject) => {
setTimeout(() => {
resolve('second');
}, 2000);
});
const third = () => {
console.log('third');
};
first()
.then((firstPromiseValue) => {
console.log(firstPromiseValue);
second()
.then((secondPromiseValue) => {
console.log(secondPromiseValue);
third();
})
}); OUTPUT: 'first', 'second', 'third'
承诺一切:
const first = new Promise((resolve, reject) => {
resolve('first');
});
const second = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('second');
}, 2000);
});
const third = new Promise(function(resolve, reject) {
resolve('third');
});
Promise.all([first, second, third]).then((values) => {
console.log(values);
}); OUTPUT: ['first', 'second', 'third']
异步等待:
如何使用 async await 转换上述代码?
对于 javascript 应用程序来说,哪个是好的流控制?
一些使用 async.waterfall 等方法的异步库呢?
顺便问一下,我上面的代码可以吗?
【问题讨论】:
-
你的
first和third事物/函数不应该与承诺有任何关系,它们没有任何异步。 -
如果我不为第一个函数编写新的 Promise,那么 .then() 将如何工作?
-
不会:不需要。你只需写
first(); second().then(third);或first(); await second(); third();。
标签: javascript callback promise async-await