我试图承诺一个不使用的第三方库callback(err, data)
图案。相反,他们总是回来callback(data)
and throw
关于错误。
Promise.promisifyAll(horse);
var p = Promise.defer();
horse.drinkAsync()
.error(function(data)
{
p.fulfill(data);
})
.catch(function (err)
{
console.error('error occured', err);
});
return p.promise;
有什么好方法可以用承诺包装这样的行为,并且仍然让它看起来不错并允许捕获抛出的错误? catch 子句不会触发,应用程序崩溃。
从 Bluebird 2.1 开始,您现在可以自定义promisifyAll
使用自定义的承诺处理程序:
function noErrPromisifier(originalMethod){
return function promisified() {
var args = [].slice.call(arguments); // might want to use smarter
var self = this // promisification if performance critical
return new Promise(function(resolve,reject){
args.push(resolve);
originalMethod.apply(self,args); // call with arguments
});
};
}
var horse = Promise.promisifyAll(require("horse"), {
promisifier: noErrPromisifier
});
horse.drinkAsync().then(function(data){
// Can use here, ow promisified normally.
});
如果原始方法异步抛出,则确实没有办法将其包装在域中,尽管我从未见过可以执行此操作的库that不好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)