У меня есть два асинхронных метода, которые возвращают значения, один из которых необходим немедленно, а другой может использоваться, основываясь на первом результате. Тем не менее, я не хочу дождаться появления первого результата, прежде чем начинать второй метод и создать зависимость последовательности выполнения.Как дождаться ранее запущенной функции в ES7?
Использование синтаксиса ES7, я бы предположить, что await
-ную Promise
будет такой же, как await
-ную функцию, которая возвращает Promise
, но он не работает:
async function tester() {
async function foo() { await setTimeout(() => {}, 2000)}
async function bar() { await setTimeout(() => {}, 1000)}
let rcFoo = foo();
let rcBar = await bar();
if (true) { // Some conditional based on rcBar
await rcFoo;
console.log(rcFoo); // It's a Promise object
}
}
Два вопроса:
- Я даже правильно понимаю асинхронный характер Javascript? Если бы вышеприведенный код работал бы, я бы достиг своей цели одновременного запуска двух асинхронных функций - ish, или это просто невозможно сделать?
- Возможно ли как-то
await
объект, который являетсяPromise
, как я пробовал, или он должен ссылаться на функцию напрямую?
Спасибо ..
Вы должны уметь «ждать» 'Promise', потому что' async' - это всего лишь сахара вокруг создания 'Promise'. Однако вы не можете использовать 'await' вне функции' async', так что, возможно, это и есть ваша проблема. –
Этот фрагмент кода уже находился в функции 'async'. –
Это может быть, но ваш пример не показывает это, поэтому я не знаю :-) –