Как сделать мой JavaScript-функцию асинхронной, когда она ограничена

У меня есть метод 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 ответ

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, он работает. Однако в другом / более старом браузере это может вызвать ошибку, которую вы описываете.

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

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