Как сделать мой 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: В целом, ответ на ваш вопрос заключается в том, чтобы сделать одну из следующих трех вещей:
- Используйте браузеры, которые поддерживают асинхронный
- Используйте Обещания и используйте браузеры, которые поддерживают Обещания
- Не используйте асинхронные (или обещания).
Это поможет объяснить, где вы получаете эту ошибку. Я предполагаю, что это при выполнении кода в вашем браузере. Кроме того, я предполагаю, что ваш браузер просто не поддерживает async
ключевое слово.
Посмотрите на следующий код:
const scope = {};
scope.foobar = async function() {
return new Promise(resolve => {
console.log('foobar');
resolve();
});
};
scope.foobar();
Если вы выполняете этот код (например, через https://jsbin.com/) в недавнем браузере Firefox или Chrome, он работает. Однако в другом / более старом браузере это может вызвать ошибку, которую вы описываете.
Если мое предположение неверно, пожалуйста, уточните.