То, что вы пытаетесь сделать, означает возможное недопонимание того, как работает Javascript двигатель.
Javascript работает однопоточно. Это означает, что он может выполнять только одну операцию за раз (он обрабатывает операторы один за другим). Некоторое асинхронное c выполнение может быть достигнуто, но только когда задействованы операции ввода / вывода (ввода / вывода) или с использованием некоторых определенных API, таких как createTimeout()
или createInterval()
.
Я рекомендую вам эта статья , чтобы лучше понять эту концепцию.
Если не выполняются истинные асинхронные задачи (например, операции ввода-вывода) , тогда
ЭТО:
aDoSomething(a, b, c);
async function aDoSomething(a, b, c) {
doSomething(a, b, c);
}
function doSomething(a, b, c) {
// do something
}
- это то же самое (но излишне менее производительное), как это:
doSomething(a, b, c);
function doSomething(a, b, c) {
// do something
}
- ПРИМЕЧАНИЕ О ДРУГИХ ОТВЕТАХ:
doSomething(a, b, c);
function doSomething(a, b, c) {
setTimeout(function() {
// do something
}, 0);
}
Это не сделает код в "// делать что-то" "асинхронным". Это только задержит выполнение этого кода до конца текущего стека (см. Статью выше). В большинстве случаев это считается плохой практикой или обходным путем. То же самое происходит с обещаниями и любым другим шаблоном, который пытается сделать синхронный код асинхронным в однопоточном движке.