Меня смущает текущее обсуждение добавления асинхронных функций и ключевого слова await
в следующий EcmaScript.
Я не понимаю, почему необходимо ключевое слово async
перед ключевым словом function
.
С моей точки зрения ключевого слова await
для ожидания результата генератора или обещания done, return
функции должно быть достаточно.
await
должно быть простым, чтобы его можно было использовать в обычных функциях и функциях генератора без дополнительного маркера async
.
И если мне нужно создать функцию, которую можно было бы использовать в результате для await
, я просто использую обещание.
Причина, по которой я спрашиваю, - это это хорошее объяснение, откуда взялся следующий пример:
async function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// some more logic
}
Это также может быть выполнено как обычная функция, если выполнение функции будет ждать завершения функции отверстия, пока не будут выполнены все ожидания.
function setupNewUser(name) {
var invitations,
newUser = await createUser(name),
friends = await getFacebookFriends(name);
if (friends) {
invitations = await inviteFacebookFriends(friends);
}
// return because createUser() and getFacebookFriends() and maybe inviteFacebookFriends() finished their awaited result.
}
На мой взгляд, выполнение всей функции задерживается до следующего тика (ожидания выполнения). Отличие от функции-генератора заключается в том, что next () запускает и изменяет значение объекта и поле done. Вместо этого функция просто вернет результат, когда это будет выполнено, а триггер - это внутренний триггер функции, такой как цикл while.
async
и функциями генератора? - person Bergi   schedule 18.07.2015