【发布时间】:2014-08-03 09:25:29
【问题描述】:
我正在尝试承诺不使用 callback(err, data) 模式的第 3 方库。相反,它们总是在出错时返回 callback(data) 和 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;
有什么好的方法可以用 Promise 包装这样的行为并且仍然让它看起来没问题并允许捕获抛出的错误? catch 子句未触发,应用程序崩溃。
【问题讨论】:
-
他们
throw出错了?!?什么图书馆?他们总是同步抛出吗? -
注意延迟的反模式,你可以
return horse.drinkAsync()另一个反模式是捕获错误只是为了记录它们,这意味着你不知道如何在这段代码中处理它们,这意味着你应该让它冒泡,直到它到达你知道如何处理它的层(为用户打印“出现问题”等)。即使您不想通知用户,手动记录仍然没有用,因为未处理的错误会自动记录。