问题描述
有人可以指出如何正确处理@twilio/conversations Client.create
错误而不必使用处理unhandledrejection
事件:
import { Client as ConversationsClient } from "@twilio/conversations";
// ...
try {
this.conversationsClient = await ConversationsClient.create('expired token');
} catch (err) {
// err: Unable to connect: Access Token expired or expiration date invalid
console.error(err);
return;
}
// but later results in an unhandled rejection
我已经找到了代码:
// simplified stack trace (reversed):
ConversationsClient.create()
// browser/client.js:
new Client()
_this.sessionPromise = _this.services.session.initialize();
this.services.syncclient.list()
twilio-sync/lib/client.js:
this._createList()
this.services.network.post(this.services.config.listsUri,requestBody).then(response => response.body);
// POST to https://cds.us1.twilio.com/v3/Lists
// which is implemented as:
return this.executeWithRetry(() => this.transport.post(uri,headers,body),retrywhenThrottled);
executeWithRetry(request,retrywhenThrottled = true) {
return new Promise((resolve,reject) => {
let codesToRetryOn = [502,503,504];
if (retrywhenThrottled) {
codesToRetryOn.push(429);
}
let retrier = new operation_retrier_1.Retrier(this.backoffConfig());
retrier.on('attempt',() => {
request()
.then(result => retrier.succeeded(result))
.catch(err => {
if (codesToRetryOn.includes(err.status)) {
let delayOverride = parseInt(err.headers ? err.headers['Retry-After'] : null);
retrier.Failed(mapTransportError(err),isNaN(delayOverride) ? null : delayOverride * 1000);
}
else if (err.message === 'Twilsock disconnected') {
// Ugly hack. We must make a proper exceptions for twilsock
retrier.Failed(mapTransportError(err));
}
else {
// Fatal error
retrier.removeAllListeners();
retrier.cancel();
reject(mapTransportError(err)); // THIS IS UNHANDLED
}
});
});
我当然不会故意这样做,但是经历了这一点后,我如何确定图书馆不会拒绝其他地方的承诺?
复制步骤:
- 获取对话演示
git clone git@github.com:TwilioDevEd/conversations-demo.git
- 将myToken设置为过期的
- 打开localhost:3000并登录
受影响的版本:1.1.0。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)