Манипулаторът 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