Понимание, где разместить ключевое слово `await`

Как отмечалось в этой публикации в группе новостей , есть несколько причин, по которым использование alloca можно считать трудным и опасным:

  • Не все компиляторы поддерживают alloca.
  • Некоторые компиляторы по-разному интерпретируют предполагаемое поведение alloca, поэтому переносимость не гарантируется даже между компиляторами, которые его поддерживают.
  • Некоторые реализации ошибочны.

4
задан Muirik 16 January 2019 в 13:02
поделиться

1 ответ

Они ведут себя по-разному; Ваш первый пример выполняется в течение двух секунд, а второй - в течение трех секунд.

В первом случае медленное и быстрое разрешено начинать параллельно; во втором случае вы заставляете первое обещание выполнить еще до того, как начнете второе.

Реальный сценарий использования множества обещаний без await их заключается в том, если вы хотите получать несколько URL-адресов параллельно.

// assuming getUrlContents() returns a Promise
let promises = [
    getUrlContents('http://url1.com/'),
    getUrlContents('http://url2.com/'),
    getUrlContents('http://url3.com/')
];

// all URLs are currently fetching

// now we wait for all of them; doesn't particularly matter what order
// they resolve
let results = [
    await promises[0],
    await promises[1],
    await promises[2]
];

Еще один вариант этого будет выполняться гораздо медленнее (и, как правило, не так, как вы хотите, если вам действительно НЕ нужно содержимое одного, прежде чем вы сможете перейти к следующему):

let a = await getUrlContents('http://url1.com/')
let b = await getUrlContents('http://url2.com/')
let c = await getUrlContents('http://url3.com/')
let results = [ a, b, c ];
[119 ] Загрузка для b не начнется, пока не завершится a и т. Д.

0
ответ дан dtanabe 16 January 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: