await
次の EcmaScript にasync 関数とキーワードを追加するという現在の議論について混乱しています。
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
}
関数の実行が、すべての await が満たされるまでホール関数の終了を待機する場合は、通常の関数として実行することもできます。
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() がオブジェクトの値と完了フィールドをトリガーして変更することです。代わりに、関数は完了時に結果を返すだけで、トリガーは while ループのような関数内部トリガーです。