Handler then
utworzy nowy obiekt i obietnica, że zostanie zwrócony tak, że obietnice mogą być przykuty.
Cytowanie bluebird's documentation on then
,
Zwraca nową obietnicę przykuty z tej obietnicy.
W twoim przypadku,
sdk.request(options)
zwraca obiekt obietnicy i że nie ma obsługi, która jest spełnienie następujących then
obsługi.
.then(function (value) {
return value;
});
ale teleskopowa then
zwraca nowy obiekt obietnica, która nie ma jeszcze obsługi spełnienia. Dlatego _fulfillmentHandler0
jest undefined
.
Można to potwierdzić jak to
var promise = require("bluebird").resolve();
console.log(promise);
wypisze
{ _bitField: 268435456,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: undefined }
od promise
ma jeszcze żadnej obsługi spełnienia. Ale po podłączeniu modułu obsługi do niego, jak to
var promise1 = promise.then(function() {})
console.log(promise);
wypisze
{ _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 }
UWAGA 1: Pojedynczy obiekt obietnica może mieć więcej niż jeden koparki do spełnienia. Dlatego powyższe wyjście pokazuje [Function]
, co oznacza szereg funkcji.
Uwaga 2: Nie musisz się zbytnio martwić o właściwości obiektów Obietnicy. To są szczegóły implementacji.
Jak na last comment,
Chcę log/zweryfikować dane/wartości zwracanych przez sdk.request
Tak, można zrobić bardzo dobrze, że z Bluebird. może można po prostu tap
obietnica i wydrukować aktualną wartość rozwiązany, jak to
return sdk.request(options).tap(console.log);
wypisze rzeczywistą wartość rozwiązany i można dołączyć then
obsługi na przetwarzanie rozwiązany wartość.
jest to może dlatego, że 'handler' jest anonimową funkcją? czy próbowałeś przekazać normalną nazwaną funkcję jako przewodnik? –
Chcesz zarejestrować wartość 'wewnątrz '** handler **, a nie obietnicę zwróconą przez' then' – Bergi