2017-12-16 8 views
1

비동기 함수 내부에서 함수가 올바르게 완료 될 때까지 기다려야합니까? 아니면 아래 코드가 정상입니까?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이 중복됩니다.

코드가 잘된 것 같아요.하지만 비동기/전체 사용을 잊어 버리고 가능한 한 직접적으로 약속을 되 돌리는 것이 가능할만큼 간단합니다. 예 : return db.doc(...).set(...), 함수를 async로 선언하지 않습니다.

+0

기다리기 전에 어떤 이유로 트리거 블록이 실행되면 어떻게됩니까? –

+0

@DougStevenson 두 경우 모두 (비동기 또는 직접 반환 선언) 반환 된 약속은 원래 던져진 db.doc 호출 인 경우 * 오류로 거부됩니다. 오류를 던진 호출 (예 :'event'가 정의되지 않은 경우)이 아닌 경우 비동기 함수를 사용하면 약속을 거부하지만 직접 반환으로 호출 스택이 위로 뜬다. 보통의. – CRice