繁体   English   中英

JavaScript类构造函数在基于promise的方式失败时应该返回什么?

[英]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.resolvePromise.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM