Я хочу предисловие, сказав, что я просмотрел много вопросов о стековом потоке, касающихся этой топики c, но я не нашел «дубликатов» как таковых, так как ни один из них не содержит решений, которые могли бы решить эту проблему c case.
Я в основном смотрел на Как мне вернуть ответ от асинхронного вызова? , и раздел «Обещания с асинхронным / ожидающим» будет работать внутри асинхронной функции , но функция, над которой я работаю, не asyn c и является частью существующей кодовой базы, которую я не могу легко изменить. Я не смог бы изменить функцию на asyn c.
Секция обратных вызовов также не будет работать, что будет объяснено ниже. В любом случае, я перейду к своему вопросу:
Я редактирую функцию (стандартная функция, а не asyn c) в JavaScript, добавляя асинхронный вызов функции. Я хочу подождать, пока вызов asyn c завершится, прежде чем я вернусь из функции (поскольку результат вызова asyn c должен быть включен в возвращаемое значение). Как мне это сделать?
Я изучил использование обратных вызовов, которые позволили бы мне написать код, который гарантированно будет работать только после завершения вызова asyn c. Однако это не будет прерывать поток программы в исходной функции, и исходная функция все еще может вернуться до запуска обратного вызова. Обратный вызов позволил бы мне выполнить что-то последовательно после асинхронной функции c, но не позволил бы мне ожидать завершения асинхронного вызова на самом высоком уровне.
Пример кода, который не возвращался желаемый результат:
function getPlayers() {
... other code ...
let outfieldPlayers = asyncGetOutfieldPlayersCall()
... other code ...
allPlayers.add(outfieldPlayers)
return allPlayers // the returned value may or may not include outfield players
}
Реальная проблема, с которой я сталкиваюсь, немного сложнее - я вызываю функцию asyn c в каждой итерации a для l oop, и мне нужно дождитесь завершения всех вызовов, прежде чем вернуться. Но я думаю, что если я смогу решить эту более простую проблему, я смогу решить эту проблему с помощью a для l oop.