Я запутался в текущем обсуждении добавления асинхронных функций и ключевого слова await
к следующему EcmaScript.
Я не понимаю, зачем нужно ключевое слово async
перед ключевым словом function
.
С моей точки зрения ключевое слово await
для ожидания результата генератора или обещания выполнено, функция 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.
}
По моему мнению, выполнение всей функции выполняется до тех пор, пока не будет выполнен следующий тик (ожидание выполнения). Разница с Generator-Function заключается в том, что next() запускает и меняет значение объекта и поле done. Функция вместо этого просто возвращает результат, когда это будет сделано, и триггер является внутренним триггером функции, как цикл while.