У меня есть образец кода, где я не мог предсказать поток кода.Как предсказать асинхронный характер обещаний
var x =() => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve([1, 2, 3]);
}, 0);
});
};
x().then((val) => {
console.log(val);
}).catch((err) => {
console.log(err.message);
});
console.log("hello");
for (var i = 0; i < 10; i++) {
console.log(i);
}
var y = Promise.all([Promise.resolve(1), Promise.reject(Error("err"))]);
y.then((arr) => {
console.log(arr);
})
.catch((err) => {
console.log(err);
});
Promise.resolve('ta-da!')
.then((result) => {
console.log('Step 2 received ' + result);
return 'Greetings from step 2';
})
.then((result) => {
console.log('Step 3 received ' + result);
})
.then((result) => {
console.log('Step 4 received ' + result);
return Promise.resolve('fulfilled value');
})
.then((result) => {
console.log('Step 5 received ' + result);
return Promise.resolve();
})
.then((result) => {
console.log('Step 6 received ' + result);
});
бревна в следующем порядке:
"hello"
0
1
2
3
4
5
6
7
8
9
"Step 2 received ta-da!"
"Step 3 received Greetings from step 2"
"err"
"Step 4 received undefined"
"Step 5 received fulfilled value"
"Step 6 received undefined"
[1, 2, 3]
для цикла становится выполнен, как и ожидалось. SetTimeout() работает как ожидалось, и обещание выполняется после цикла события.
Остальные 2 обещания сталкиваются. Я ожидал, обещания будут fulfulled сразу в syncronously и результат будет
"hello"
0
1
2
3
4
5
6
7
8
9
"err"
"Step 2 received ta-da!"
"Step 3 received Greetings from step 2"
"Step 4 received undefined"
"Step 5 received fulfilled value"
"Step 6 received undefined"
[1, 2, 3].
Даже если обещания будут решены async.How они столкнулись.
Снимок экрана прилагается.
Шаг 3 не возвращает обещание, поэтому цепочка разбита, а остальная часть перемещается на следующую итерацию цикла событий (в отличие от планирования другой микрозадачи для немедленного выполнения). –
@ MadaraUchiha Шаг 2 также не вернул обещание. – thefourtheye
@thefourtheye вы можете объяснить, почему они сломаны. Это выглядит хорошо для меня. Журналы также говорят то же самое. – starkk92