处理类构造函数中的承诺错误[重复]
Posted
技术标签:
【中文标题】处理类构造函数中的承诺错误[重复]【英文标题】:Handle promise error in class constructor [duplicate] 【发布时间】:2020-04-22 15:43:15 【问题描述】:我的类构造函数调用了一个连接到服务的承诺。如果连接失败,如何捕获错误?我创建类实例的调用被包装在一个 try catch 块中,但它没有从 promise 中得到错误。像这样……
const client = require('aService')
trylet s = new Service()
catch(e)console.log(`instance error $e`)
class Service
constructor()
this.connection = client.login()
.then()
...
.catch(e=>
console.log(`promise error $e`
return e
)
控制台会记录“promise error”,但不会记录“instance error”,我需要这样才能干净利落地处理类实例失败。
非常感谢
【问题讨论】:
【参考方案1】:Promise 已分配给 this.connection
,但您在构造函数中 .catch
ing 错误。只有当您可以对它做某事时才能更好地捕捉错误 - 也就是说,在外部Service
的消费者中。因此,只需将 .catch
从构造函数移动到您创建服务的正下方:
const client = require('aService')
class Service
constructor()
this.connection = client.login()
.then(() =>
// ...
);
let s = new Service()
s.connection.catch((e) =>
console.log(`connection error $e`)
);
或者使用await
和try
/catch
:
const client = require('aService')
class Service
constructor()
this.connection = client.login()
.then(() =>
// ...
);
(async () =>
let s = new Service()
try
await s.connection;
// connection done
catch(e)
console.log(`connection error $e`)
)();
【讨论】:
以上是关于处理类构造函数中的承诺错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Bluebird 在构造函数构建的“类”上承诺导出的函数
在派生构造函数中的某些代码块之后调用派生类中的基类构造函数[重复]