2017-12-16 16 views
1

async関数の中で、関数が正しく完了するのを待つ必要がありますか、それとも下のコードは問題ありませんか?Firebase関数の非同期関数から返すものは?

const db = admin.firestore(); 

export const onUserCreate = functions.auth.user().onCreate(async event => { 
    try { 
     const user: User = { 
      userId: event.data.uid, 
      email: event.data.email 
     }; 

     await db.doc(`users/${user.userId}`).set(user, {merge: true}); 
    } catch (error) { 
     throw error; 
    } 
}); 
+1

https://jakearchibald.com/2017/await-vs-return-vs-return-await/ – WilomGfx

答えて

0

この関数は、db.doc(...).set(..)自体が解決した後にのみ解決する約束を返します。この場合、return awaitは冗長です。

あなたのコードはそのままだと思いますが、async/awaitを完全に使用することを忘れる可能性があり、約束を直接返すだけで十分です。例:return db.doc(...).set(...)、関数をasyncとして宣言することはありません。

+0

待ち止め前にキャッチブロックが何らかの理由でトリガーされた場合はどうなりますか? –

+0

@DougStevensonいずれの場合(関数は非同期または直接リターンと宣言されています)、元々投げた 'db.doc'呼び出しの場合、返された約束はエラー*で拒否されます。エラーを投げた呼び出しでない場合( 'event'が未定義の場合など)は、非同期関数では約束を拒否しますが、直接的な戻りでエラーは呼び出しスタックをいつも – CRice

関連する問題