Я думаю, что ваше понимание обещаний и async/await
неточно. Когда вы выполняете функцию async
, ключевое слово await
перед обещанием убедитесь, что выполнение кода приостановится до тех пор, пока обещание не будет выполнено или отклонено. Ваш код может быть упрощен:
var currentPromise;
async function asyncFunc(promise){
// Do some code here
return await promise;
}
function anotherFunction(){
asyncFunc(currentPromise);
}
Когда мы называем return await promise
, исполнительный механизм ждет в неблокируемом пути, пока обещание не выполнено или отклонено, а затем возвращает результат в функцию anotherFunction
.
Примечание: Если вы хотите выполнить обещания в последовательности, вы можете использовать функцию reduce
в bluebird
или этого method, если вы предпочитаете ванильный JavaScript.
Приостановка выполнение кода
С Вашего последнего комментария к первоначальному вопросу, я понимаю, что вы хотите, чтобы приостановить выполнение программы. Во-первых, вам нужно понять, что остановка выполнения Javascript в блокирующем режиме невозможна. Javascript - это однопоточный язык программирования, который использует цикл событий для обработки параллелизма. Вы не можете остановить весь двигатель для работы. В противном случае программа замерзнет. В потоковом языке программирования программисты используют потоки для реализации параллелизма.
В Javascript вы можете приостановить выполнение в неблокирующим способом с использованием async/await
. Например:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms))
}
async function main() {
await sleep(1500)
console.log('Hello world with delay!')
}
main()
Если я правильно понял, в вашем случае вы хотите приостановить выполнение на основе пользовательского ввода. Вы можете реализовать любой тип логики, который вы хотите. Например, следующая программа ждать пользователя нажать клавишу RETURN
:
function waitForUserInput(keyCode) {
return new Promise(resolve =>
document.addEventListener('keydown', (event) => {
if (event.keyCode === keyCode) resolve()
}
)
}
async function main() {
await waitForUserInput(13)
console.log('Thank you for your submission!')
}
main()
В этом примере, обещание не будет решена до тех пор, keyCode
не будет нажата, и ничто не будет регистрироваться в консоли. Обратите внимание, что waitForUserInput
не остановит механизм Javascript. Двигатель продолжит выполнение любого другого кода и ответит на события пользовательского интерфейса.
Что применимо к каждой отдельной функции? Может помочь какой-то фон или пример. – jib
Не каждая функция. Я сказал * контролировать *, что он останавливается, а не применять его ко всем функциям. – MasterBob
вы не можете использовать 'await' внутри функции, которая не установлена как' async' - поэтому 'anotherFunction' недействителен –