[英]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.