Я изучаю Promise, чтобы понять это. Я немного прочитал о цикле событий JavaScript. В этом article кратко представлена работа цикла событий, такая как стек вызовов, таблица событий и очередь сообщений.Понимание порядка выполнения последующих обработчиков then() разрешенных обещаний
Но я не знаю, как стек вызовов имеет дело с линией, содержащей «возврат», и что происходит после этого. Ниже приведен пример, который я написал, чтобы надеяться понять, как работает Promise на основе цикла событий. Также см. http://jsbin.com/puqogulani/edit?js,console, если вы хотите отдать его.
var p1 = new Promise(
function(resolve, reject){
resolve(0);
});
p1.then(function(val){
console.log(val);
p1.then(function(){
console.log("1.1.1");
p1.then(function(){
console.log("1.1.2");
p1.then(function(){
console.log("1.1.3");
});
});
});
p1.then(function(){
console.log("1.2");
})
return 30;
//return new Promise(function(resolve, reject){
// resolve(30);
//});
})
.then(function(val){
console.log(val/2);
});
p1.then(function(){
console.log("2.1");
});
console.log("Start");
Как видно, существует два «возврата», при этом каждый из них даст другой порядок вывода. В частности, при использовании return 30;
, 1.1.2, 1.1.3
после 15
, но при использовании return new Promise(...)
, 1.1.2, 1.1.3
- до 15
. Так что же произошло, когда код достиг двух разных «возвращений»?
Удалены обратные вызовы из 1.1.4 и 1.1.5 - они не упоминаются и не могут быть понятны, и все уже доходят до 1.1.2. Каждый сможет по-прежнему понять эту дилемму без них. –
@ try-catch-finally, Спасибо за ваше предложение и редактирование. Я просто хотел сделать это яснее, хотя иногда это делает обратное :) –
Итак, @ try-catch - наконец-то, мне интересно, можете ли вы дать советы по моему вопросу? Спасибо –