@twilio/ беседы Необработанный отказ клиента JS SDK с истекшим токеном

Может кто-нибудь указать, как правильно обрабатывать @twilio / разговоры 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
                    }
                });
            });

Конечно, я бы не стал делать это намеренно, но, испытав это, как я могу быть уверен, что библиотека не отвергнет обещания в других местах?

Действия по воспроизведению:

  1. получить демонстрацию разговора git clone git@github.com:TwilioDevEd/conversations-demo.git
  2. установите myToken на просроченный
  3. откройте localhost:3000 и войдите

Затронутая версия: 1.1.0.

0 ответов

Другие вопросы по тегам