Каждый раз, когда обещание разрешается, все (первый уровень) .then()
, прикрепленные к нему, планируется выполнить на следующем тике события l oop. Итак, в вашем случае:
foo.then(() => m1('b').then(() => console.log('do something immediately after b')));
foo.then(() => m1('c'));
После разрешения foo
мы получаем первый журнал:
a - done
Обратные вызовы foo
будут запланированы для выполнения в следующем тик события l oop:
| Next tick |
|:---------:|
| then(b) |
| then(c) |
Итак, выполнив тик, мы получаем следующий журнал:
a - done
b - done
c - done
Помните, then(b)
имел обратный вызов журнала. Поэтому во время выполнения обратный вызов добавляется к следующему событию l oop tick. Таким образом, следующий тик будет:
| Next tick |
|:---------:|
| then(log) |
Итак, выполнив второй тик, мы получим ваш окончательный журнал:
a - done
b - done
c - done
do something immediately after b