当我使用bluebird promises时,以下代码完全正常:
import * as Promise from 'bluebird';
getAccount(id) {
var account = find(accounts, ['id', id]);
return account ?
Promise.resolve(account) :
Promise.reject(new NotFoundError());
}
NotFoundError
定义如下:
export function NotFoundError(message = 'Not Found') {
this.name = 'NotFoundError';
this.message = message;
this.stack = (new Error()).stack;
}
NotFoundError.prototype = Object.create(Error.prototype);
NotFoundError.prototype.constructor = NotFoundError;
但是,如果我删除了getAccount()
中bluebird的导入并让node.js接管了promises,则代码在NotFoundError()
构造函数内失败,因为未定义this
。具体来说,构造函数从上面显示的getAccount()
代码中正确调用两次,第二次调用node.js的_tickCallback()
函数,其中this
为未定义:
NotFoundError (errors.js:13)
runMicrotasksCallback (internal/proces…ext_tick.js:58)
_combinedTickCallback (internal/proces…ext_tick.js:67)
_tickCallback (internal/proces…ext_tick.js:98)
为什么node.js第二次调用NotFoundError()
构造函数而且太错误了!!!
请帮忙。
答案 0 :(得分:2)
问题是由by this line引起的:
.catch(NotFoundError, function() { ... })
原生承诺没有选项可以将特定错误类传递给catch
方法,因此会发生错误时调用NotFoundError
(没有new
1}}在它前面)因为它被认为是捕获处理程序。