Q.nfcall或Q.denodeify为构造函数

时间:2014-12-28 13:29:12

标签: javascript promise q

我正在使用一个提供类的库,其构造函数使用Node.js回调模式:

new FooBar({key: value}, function(err, data) {
  console.log(data);
});

我想使用一个承诺,以便我可以做这样的事情:

fooBarWrapper({key: value}).then(function(data) {
  console.log(data);
});

我知道我可以使用Q.denodeify创建一个包装器或使用Q.nfcall调用一个函数,但是它对构造函数有什么作用?

2 个答案:

答案 0 :(得分:1)

我设法自己解决了。您可以使用Q.defer将回调转换为承诺:

var deferred = Q.defer();
new FooBar({key: value}, deferred.makeNodeResolver());
deferred.then(function(data) {
  console.log(data);
});

我在这里留下这个答案,希望能帮助其他人解决同样的问题。

答案 1 :(得分:1)

构造函数不应该进行异步调用。这样做并不好玩,因为制作这个库的人在构造函数中执行异步IO,这对他们来说完全不是很酷:)

我建议你在回调中包装该函数:

function fooBar(val, cb){
    new FooBar(val, cb);
}

您可以从代码中拨打Q.nfcallQ.denodeify。我相信这比创建一个明确的延迟更好。