Порядок исполнения в обещаниях в javascript - PullRequest
0 голосов
/ 21 марта 2019

У меня есть пример программы, чтобы понять, как работает promises и async/ await. Но я немного запутался по поводу порядка выполнения обещаний. Кто-нибудь может объяснить, как это работает?

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

1017 * Случай 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

Спасибо.

1 Ответ

2 голосов
/ 21 марта 2019

Если вы вызываете .then(cb) для Обещания, оно создает и возвращает новое Обещание, которое разрешает все, что возвращает обратный вызов . Если это само Обещание, то это Обещание будет ожидаться до того, как цепочка продолжится. В вашем случае вы сделали:

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

Если вы присоединяете другое .then к другому обещанию, это не имеет значения для этой цепочки обещаний.

...