jer*_*ome 8 javascript node.js promise bluebird
看起来非常基本,基于Promise的实现的实现不会返回我期望看到的值/数据.
这就是我期望这个界面工作的方式:
sdk.request(options) => Promise~Response ? Object (JSON)
Run Code Online (Sandbox Code Playgroud)
这是我模型中的代码:
return sdk.request(options).then(function (value) {
return value;
});
Run Code Online (Sandbox Code Playgroud)
当我记录模型的返回时,我看到:
{
_bitField: 0,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: undefined
}
Run Code Online (Sandbox Code Playgroud)
当我看到_fulfillmentHandler0: undefined
这似乎意味着没有履行处理程序时:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then
但履行处理程序似乎确实存在:
return sdk.request(options).then(function (value) {
// fulfillment handler, right?
return value;
});
Run Code Online (Sandbox Code Playgroud)
该then
处理程序将创建一个新的承诺的对象,并且将返回,这样的承诺可以链接.
返回从此承诺链接的新承诺.
在你的情况下,
sdk.request(options)
Run Code Online (Sandbox Code Playgroud)
返回一个promise对象,它有一个履行处理程序,它是以下then
处理程序.
.then(function (value) {
return value;
});
Run Code Online (Sandbox Code Playgroud)
但是then
处理程序返回一个新的promise对象,它还没有一个履行处理程序.这就是为什么_fulfillmentHandler0
是undefined
.
你可以这样确认一下
var promise = require("bluebird").resolve();
console.log(promise);
Run Code Online (Sandbox Code Playgroud)
将打印
{ _bitField: 268435456,
_fulfillmentHandler0: undefined,
_rejectionHandler0: undefined,
_progressHandler0: undefined,
_promise0: undefined,
_receiver0: undefined,
_settledValue: undefined }
Run Code Online (Sandbox Code Playgroud)
因为promise
还没有履行处理程序.但是当你为它附加一个处理程序时,就像这样
var promise1 = promise.then(function () {})
console.log(promise);
Run Code Online (Sandbox Code Playgroud)
将打印
{ _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 }
Run Code Online (Sandbox Code Playgroud)
注1:单个promise对象可以有多个履行处理程序.这就是上面的输出显示的原因[Function]
,这意味着一系列功能.
注意2:您不必担心Promise对象的属性.这些是实现细节.
根据最后的评论,
我想记录/验证由...返回的数据/值
sdk.request
是的,你可以用蓝鸟做得很好.你可以简单地tap
承诺,你可以打印实际的解决值,就像这样
return sdk.request(options).tap(console.log);
Run Code Online (Sandbox Code Playgroud)
将打印实际解析的值,您可以附加then
处理程序来处理已解析的值.