簡體   English   中英

firebase 雲函數中的 Promises 錯誤處理

[英]Error handling with Promises in firebase cloud functions

我對 firebase 雲函數和 javascript 作為一個整體非常陌生,我正在嘗試掌握雲函數中錯誤處理的竅門。 我寫了一個 function,它只是從一個 firestore 文檔中獲取數據並更新另一個文檔。 但是,當我測試錯誤場景時,拒絕沒有得到正確處理。 下面的代碼顯示了 function。 請問我做錯了什么??

exports.testFunction = functions.firestore.document('test/{docID}').onCreate(async(snap, context)=>{
const data = snap.data();
const name = data.name;
const age = data. age;
const id = context.params.docID;
return new Promise(async(res, rej)=>{
  try{
       await firestore.collection('testResults').add({
         'name': name,
         'age': age
        }); 
       await firestore.collection('test').doc(id).delete();
       res();
  }catch(e){
   console.log(e);
   rej();
  }
 });
});

首先,很少有理由在 JavaScript 中使用new Promise ,當您有 async/await 可用的功能時,這些功能已經返回承諾。 您應該讓 Firestore 返回的現有承諾正常拒絕 - 如果您只想記錄它們,則無需捕獲它們的錯誤。 Cloud Functions 將記錄被拒絕的承諾。

您真正需要做的就是:

const data = snap.data();
const name = data.name;
const age = data. age;
const id = context.params.docID;
await firestore.collection('testResults').add({
    'name': name,
    'age': age
}); 
await firestore.collection('test').doc(id).delete();

如果您出於某種原因確實需要從 Firestore 捕獲被拒絕的承諾,您可以使用 try/catch 並返回一個新的拒絕以正確地使 function 失敗:

try {
    await firestore.collection('testResults').add({
        'name': name,
        'age': age
    }); 
    await firestore.collection('test').doc(id).delete();
}
catch (e) {
    return Promise.reject(e);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM