Как отмечалось в этой публикации в группе новостей , есть несколько причин, по которым использование alloca
можно считать трудным и опасным:
alloca
. alloca
, поэтому переносимость не гарантируется даже между компиляторами, которые его поддерживают. Они ведут себя по-разному; Ваш первый пример выполняется в течение двух секунд, а второй - в течение трех секунд.
В первом случае медленное и быстрое разрешено начинать параллельно; во втором случае вы заставляете первое обещание выполнить еще до того, как начнете второе.
Реальный сценарий использования множества обещаний без 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
и т. Д.