JavaScript中的承诺执行顺序



我有一个示例程序,可以了解 promises async/ await works>工作。但是,对承诺的执行顺序有些困惑。有人可以解释这是如何工作的吗?

case1

//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

case2

我还有另一个示例在async/等待中。但是按照执行顺序是正确的。

//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

谢谢。

如果在承诺上调用 .then(cb),则会创建并返回新的承诺,它将解决到callbback returns 的任何内容。如果这是一个承诺本身,那么在链条继续之前,这一承诺将受到期待。在您的情况下,您做到了:

promiseTest.then((res)=> {
 console.log('Promise1 result : '+ res);
 return undefined; // implicit return
}).then(() => {
 /* doesnt matter what you do here */
 return undefined;
}).then(finish)

您是否将另一个.then附加到另一个承诺对这一承诺链并不重要。

最新更新