我正在使用一个提供类的库,其构造函数使用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
调用一个函数,但是它对构造函数有什么作用?
答案 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.nfcall
或Q.denodeify
。我相信这比创建一个明确的延迟更好。