Как сделать, чтобы моя функция JavaScript была асинхронной, когда она ограничена - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть метод с именем updateStatus в одном из моих файлов js. Я определяю все в каждом файле JS, как показано ниже.

Теперь я хочу сделать эту функцию асинхронной, но если я помещу асинхронный код перед объявлением функции, как показано ниже, я получаю сообщение об ошибке, сообщающее, что в этой же строке ожидается точка с запятой.

scope.updateStatus = async function(profileId, isConnected)

'use strict';

// Set local tp namespace
if (typeof yb === 'undefined')
  var yb = {};

$(function() {
  yb.chat.initializeChat();
});

yb.chat = new function() {
  var scope = this;

  scope.initializeChat = function() {
    scope.initializeHub();
  };

  scope.updateStatus = function(profileId, isConnected) {
    // do some work
  };

  scope.initializeHub = function() {
    scope.chat = $.connection.chatHub;

    scope.chat.client.setConnectionStatus = function(profileId, isConnected) {
      scope.updateStatus(profileId, isConnected);
    };
  };

};

1 Ответ

0 голосов
/ 09 ноября 2018

tldr : В целом, ответом на ваш вопрос является одно из следующих трех действий:

  1. Используйте браузеры, поддерживающие асинхронную
  2. Используйте Обещания и используйте браузеры, которые поддерживают Обещания
  3. Не используйте асинхронные (или обещания).

Это поможет объяснить, где вы получили эту ошибку. Я предполагаю, что это при выполнении кода в вашем браузере. Кроме того, я предполагаю, что ваш браузер просто не поддерживает ключевое слово async.

Посмотрите на следующий код:

const scope = {};

scope.foobar = async function() {
  return new Promise(resolve => {
    console.log('foobar');
    resolve();
  });
};

scope.foobar();

Если вы выполняете этот код (например, через https://jsbin.com) в недавнем браузере Firefox или Chrome, он работает. Однако в другом / более старом браузере это может вызвать описанную вами ошибку.

Если мое предположение неверно, уточните, пожалуйста.

...