【发布时间】:2015-01-26 19:03:50
【问题描述】:
问题
我发现在我的代码中通常会出现以下相当冗长的模式,当我包含的库为我提供难以promisify 的对象时:
var object = crummyLibrary.create();
return new Promise(function(resolve, reject){
object.method('foo', function(err, bar){
if(err){
reject(err);
}else{
resolve(bar);
}
});
});
这在以前使用Promise.defer() 时不那么冗长:
var deferred = Promise.defer();
object.method('foo', deferred.callback);
return deferred.promise;
但这现在已经被弃用了(有充分的理由),但我还没有找到一个很好的替代这个模式。我知道有这个:
return Promise.promisify(object.method, object)('foo');
但是因为context/receiver的传递,感觉很hacky和fiddely。
我在寻找什么
我希望有一些东西可以取代旧的 deferred.callback,可能是这样的:
var promise = new Promise;
object.method('foo', promise.callback);
return promise;
或者可能:
return new Promise(function(resolve, reject, callback){
object.method('foo', callback);
});
或者,有人向我指出我一直“做错了”。
【问题讨论】:
-
我不知道您是否注意到,但 Petka (Esailija) 已将
Promise.fromNode添加到库中以供您使用 - 无论如何,这就是您应该在您的案例中使用的内容。 -
我注意到了。请参阅 Esailija 回答下方的对话。 :)
标签: node.js asynchronous promise bluebird