Обработчик then
создаст новый объект обещания, который будет возвращен, чтобы можно было связать обещания.
Цитируя документацию bluebird по then
,
Возвращает новое обещание, связанное с этим обещанием.
В твоем случае,
sdk.request(options)
возвращает объект обещания, который имеет обработчик выполнения, который является следующим обработчиком then
.
.then(function (value) {
return value;
});
но обработчик then
возвращает новый объект обещания, у которого еще нет обработчика выполнения. Вот почему _fulfillmentHandler0
это undefined
.
Вы можете подтвердить это так
var promise = require("bluebird").resolve();
console.log(promise);
будет печатать
{ _bitField: 268435456,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: undefined }
так как promise
еще не имеет обработчика выполнения. Но когда вы прикрепляете к нему обработчик, вот так
var promise1 = promise.then(function () {})
console.log(promise);
будет печатать
{ _bitField: 268435457,
_fulfillmentHandler0: [Function],
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0:
{ _bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: undefined },
_receiver0: undefined,
_settledValue: undefined }
Примечание 1. Один объект обещания может иметь более одного обработчика выполнения. Вот почему вывод выше показывает [Function]
, что означает массив функций.
Примечание 2. Вам не нужно особо беспокоиться о свойствах объектов Promise. Это детали реализации.
Согласно последнему комментарию,
Я хочу зарегистрировать/проверить данные/значение, возвращаемые sdk.request
Да, вы можете очень хорошо сделать это с Bluebird. Вы можете просто tap
обещание, и вы можете распечатать фактическое разрешенное значение, как это
return sdk.request(options).tap(console.log);
напечатает фактическое разрешенное значение, и вы можете прикрепить обработчик then
для обработки разрешенного значения.
person
thefourtheye
schedule
09.06.2015
handler
является анонимной функцией? Вы пытались передать обычную именованную функцию в качестве обработчика? - person Avraam Mavridis   schedule 09.06.2015value
внутри обработчика, а не обещание, возвращенноеthen
- person Bergi   schedule 09.06.2015