Скажем, выполнение обоих обещаний занимает 1 секунду, если вы не правильно связали свои обещания:
somePromise.then(() => {
// 1.
someOtherPromise.then(() => {
// 3.
console.log("inner");
});
}).then(() => {
// 2.
console.log("outer");
});
Во-первых, 1.
произойдет через t + 1 с. Затем он запускает someOtherPromise
, но не ждет его, поэтому 1.
завершается «синхронно», что приводит к выполнению 2.
(при t + 1s + Ɛns). В t + 2s, 3.
выполняется. Если вы подождете другое обещание, то:
somePromise.then(() => {
// 1.
return someOtherPromise.then(() => {
// 2.
console.log("inner");
});
}).then(() => {
// 3.
console.log("outer");
});
Сначала, 1.
произойдет после t + 1 с. Затем он запускает someOtherPromise
, но ожидает его: 3.
будет вызван только после разрешения возвращенного обещания. Так что 2.
происходит в t + 2s, затем 3.
происходит в t + 2s + Ɛns.
Примечание: в функциональном мире у вас обычно есть .map
и .flatMap
, но JS Promise's .then
смешивает оба в зависимости от того, какой ответный вызов был возвращен благодаря динамической c печати.