【发布时间】:2019-03-21 20:32:02
【问题描述】:
我有一个示例程序来了解 promises 和 async/ await 的工作原理。但是我对承诺的执行顺序有点困惑。任何人都可以解释这是如何工作的吗?
案例1
//Promise 1
let promiseTest = new Promise((resolve, reject) => {
var k = 0;
for(i=0; i< 1000; i++ ){
k += i;
}
resolve(k);
console.log("Inside promise1")
});
promiseTest.then((res)=> {
console.log('Promise1 result : '+ res);
}).then(() => {
promiseTest2.then((res) => {
console.log(res)
});
}).then(finish)
.catch((err) => {
console.log(err)
});
//Promise 2
let promiseTest2 = new Promise ((resolve, reject) => {
console.log("Inside promise2")
});
function finish(){
console.log("finished promise");
}
为此,我得到的结果为
结果
Inside promise1
Inside promise2
Promise1 result : 499500
finished promise
案例2
我有另一个例子对 async/await 做同样的事情。但是按这个执行顺序是正确的。
//Async await test
async function AsyncTest(){
console.log("Inside async1")
var k = 0;
for(i=0; i< 1000; i++ ){
k += i;
}
console.log('async1 result : '+ k);
const result = await AsyncTest2();
console.log(result)
console.log("finished async");
}
async function AsyncTest2(){
return "Inside async2";
}
AsyncTest();
结果
Inside async1
async1 result : 499500
Inside async2
finished async
谢谢。
【问题讨论】:
-
你没有从回调中返回第二个promise,所以它不是同一个链的一部分。
-
@jonrsharpe 你能纠正我做错的部分吗?
-
return promiseTest2.then(...) -
好的,很酷,我更正了它。它以正确的顺序工作。那么这两种情况有什么不同呢?
标签: javascript node.js promise async-await