Понимание порядка выполнения в промисах JavaScript
Промисы в JavaScript предлагают модель асинхронного программирования, в которой код выполняется после определенного события или обещания , выполняется. Однако при работе с несколькими обещаниями важно понимать порядок выполнения, чтобы избежать непредсказуемого поведения.
Рассмотрим следующий фрагмент кода:
Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);
После выполнения вы можете наблюдать следующий порядок вывода:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
Понимание порядка выполнения
Promise.resolve('A').then(function (a) { console.log(2, а); вернуть «Б»; }).then(функция (a) { var p = Promise.resolve('C').then(function (a) { console.log(7, а); }).then(функция (a) { console.log(8, а); }); console.log(3, а); вернуть р; // Связываем внутреннее обещание с родительской цепочкой }).then(функция (a) { var p = Promise.resolve('D').then(function (a) { console.log(9, а); }).then(функция (a) { console.log(10, а); }); console.log(4, а); вернуть р; // Связываем внутреннее обещание с родительской цепочкой }).then(функция (a) { console.log(5, а); }); консоль.журнал(1); setTimeout(функция () { консоль.журнал(6) }, 0);
При таком подходе порядок выполнения становится полностью детерминированным: 1, 2 "A", 3 "B", 7 "C", 8 неопределенный, 4 неопределенный, 9 "D", 10 неопределенных, 5 неопределенных и 6.Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3