setTimeout
добавляет задержку перед тем вызова функции, в то время как async
/await
является синтаксической наверх обещание, способ кода цепи для запуска после вызова завершает, так что они» re другой.
SetTimeout имеет ужасные обработки ошибок характеристики, поэтому я рекомендую следующие во всем коде:
let wait = ms => new Promise(resolve => setTimeout(resolve, ms));
, а затем никогда не называйте setTimeout
непосредственно снова.
Ваш код теперь становится:
let foo = async() => {
await wait(2000);
await this._doSomething();
}
кроме foo
ждёт doSomething
закончить. Обычно это желательно, но без контекста трудно понять, чего вы хотите. Если вы имели в виду, чтобы запустить doSomething
параллельно с другим кодом, я рекомендую:
async() => { await Promise.all([foo(), this._otherCode()]); };
присоединиться и захватить ошибки в том же месте.
Если вы действительно имел в виду огонь и забыть _doSomething
и не ждать его, вы можете потерять await
, но вы должны попытаться/отлавливать ошибки:
async() => {
let spinoff = async() => { try { await foo(); } catch (e) { console.log(e); } };
spinoff(); // no await!
}
Но я не рекомендую эту схему, так как это тонко и легко пропустить.
_ «Код выглядит так» _ Вряд ли, и поэтому вы не должны удалять 'async' и' await'. В этом примере нет смысла, но это не значит, что это бессмысленно в реальном коде. – zeroflagL
Немного непонятно, что именно вы здесь задаете. Как работает кусок кода **, предположительно **, и как можно удалить «async» и «await' ** **)? Без четкого вопроса, который имеет реальный * ответ * на него, вы просто получаете очень широкий и упрямый совет. – noppa
Я редактировал вопрос, чтобы сделать его более ясным, что я пытаюсь достичь. – Marta