Как я окунулся в изучение Promise
s, мое понимание остановилось на следующем вопросе, который я не нахожу обсуждаемым (все, что я нахожу, - это конкретные обсуждения конструктора Promise
, а Promise
'then
', но не обсуждение, которое сравнивает их шаблоны проектирования).
1. Конструктор Promise
Из документации MDN, , мы используем конструктор Promise (добавлен мой комментарий):
new Promise(function(resolve, reject) { ... }); // <-- Call this Stage 1
Объект функции с двумя аргументами
resolve
иreject
. Первый аргумент исполняет обещание, второй аргумент отвергает его. Мы можем вызовите эти функции после завершения нашей работы.
2. Функция then
Переходя к функции then
, которую можно вызвать в объекте Promise
(который возвращает новый объект Promise
), мы следующая сигнатура функции, описанная в документации (с добавленными мной комментариями):
p.then(onFulfilled, onRejected);
Chaining
Поскольку метод
then
возвращает Promise, вы можете легко вызовы.
var p2 = new Promise(function(resolve, reject) {
resolve(1); // <-- Stage 1 again
});
p2.then(function(value) {
console.log(value); // 1
return value + 1; // <-- Call this Stage 2
}).then(function(value) {
console.log(value); // 2
});
Мой вопрос
Из приведенного выше фрагмента кода мне кажется, что значение передано функции resolve
в 1-й стадии (во втором входе resolve
- ниже (2), выше ) передается на следующий этап (первая функция then
, следующая в том же фрагменте кода). На этапе 1 нет возвращаемого значения. Однако это возвращаемое значение на этапе 2, которое после этого переходит на следующий этап (вторая функция then
).
Это отсутствие соответствия между шаблоном проектирования для создания Promise
и использование функции then
по существующему обещанию (которое также возвращает Promise
), просто исторический случай (один требует вызова обратного вызова, но ничего не возвращает, а другой возвращает значение, но не вызывает обратный вызов)?
Или мне не хватает основной причины, почему конструктор Promise
использует другой шаблон проектирования, чем функция then
?