[英]What should JavaScript class constructor return when it fails in promise-based way?
我正在尝试检查构造函数中传递参数的值,然后以可链接的基于承诺的方式执行某些操作。 但是,我发现如果我在构造函数中使用throw Error
,如果失败,我就不能.catch
错误。 我怎样才能实现这个目标?
class Car {
constructor(name = '', brand = '') {
if (!name || !brand) {
throw new Error('Initiate error');
}
this.name = name;
this.brand = brand;
}
beep() {
return Promise.resolve(`${this.brand}-${this.name}`);
}
}
const audi = new Car('A8', 'Audi');
audi.beep()
.then((val) => console.log(val))
const test = new Car();
test.beep()
.then((val) => console.log(val))
.catch((error) => console.log(error)); // This line didn't work, how can I get the error thrown by constructor?
当您调用Promise.resolve
或Promise.reject
,这些实际上只是用于创建立即解析或拒绝的新Promise对象的辅助方法。 没有理由你的错误应该被.catch
处理程序捕获 - 错误不会发生在promise中,所以它无法知道它。
我建议将错误移出构造函数并在实际检查时创建它(即beep
):
class Car {
constructor(name = '', brand = '') {
this.name = name;
this.brand = brand;
}
beep() {
return new Promise(function (resolve, reject) {
if (!this.name || !this.brand) {
reject(new Error('Initiate error'));
}
resolve();
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.