Вы можете создать асинхронную задержку:
const delay = milliseconds => new Promise(resolve, setTimeout(resolve, milliseconds));
И использовать это в своей функции asyn c:
async function getResultAsync() {
while (true) {
if (typeof someVariable !== 'undefined') {
return someVariable;
}
await delay(250);
}
}
Это будет продолжать ждать, пока someVariable
не будет определено , с задержкой 250 миллисекунд между каждой проверкой, без блокировки.
Обратите внимание, что вы должны возвращать что-то внутри своей функции asyn c; это разрешает возвращаемое Promise
.
Затем используйте в своей fetchAndInstantiate
функции:
fetchAndInstantiate = async function(a, b, c) {
delete someVariable;
console.log('called fetchAndInstantiate');
document.dispatchEvent(new CustomEvent('wasmcall', {detail: { wasm_mod: a, function: b, args: c}}));
await getResultAsync();
}
Вам не нужно смешивать await
с then()
; await
разворачивает для вас разрешение Promise
.