亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

云函數 onUpdate:無法讀取未定義的屬性“forEach”

云函數 onUpdate:無法讀取未定義的屬性“forEach”

斯蒂芬大帝 2023-08-05 21:01:58
現在我正在嘗試更新我的項目中的圖片。我可以更新云火商店中的圖片網址。但我也想使用 firebase 云功能從云存儲中刪除上一張圖片。我想要實現的是,當我上傳新圖片時,從云存儲中刪除以前的圖片。這是我的數據結構。我在“產品”集合中有“樣本”字段。當“樣本”字段中的圖片更新時,我想刪除云存儲中的原始圖片。但我在云函數日志控制臺中收到錯誤。類型錯誤:無法讀取未定義的屬性“forEach”這是我的云函數代碼。const functions = require('firebase-functions');const admin = require('firebase-admin');admin.initializeApp();const Firestore = admin.firestore;const db = Firestore();exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {    const deletePost = snap.before.data().sample;    let deletePromises = [];    const bucket = admin.storage().bucket();    deletePost.images.forEach(image => {        deletePromises.push(bucket.file(image).delete())    });        await Promise.all(deletePromises)})我想修復這個錯誤。
查看完整描述

2 回答

?
MM們

TA貢獻1886條經驗 獲得超2個贊

onUpdate 只查看一個文檔,從您的文檔屏幕截圖中可以看出,它snap.before.data().sample是一個字符串,您的代碼將其視為一個對象,甚至是一個查詢快照?


除非我誤解了,否則這是正確的您的代碼嗎?


const functions = require('firebase-functions');

const admin = require('firebase-admin');

admin.initializeApp();


const Firestore = admin.firestore;

const db = Firestore();




exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {

    const deletePost = snap.before.data().sample;

    const bucket = admin.storage().bucket();


    await bucket.file(deletePost).delete();


    return null;   // See https://firebase.google.com/docs/functions/terminate-functions

 

});


查看完整回答
反對 回復 2023-08-05
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

無論問題如何forEach,您的代碼都無法工作:您嘗試將 URL 傳遞給file()Bucket 的方法,而您應該傳遞此存儲桶中的文件名稱。


Product一種解決方案是將文件的名稱保存在文檔的另一個字段中。


然后,正如 Cleanbeans 所解釋的,您不需要使用forEach,因為在您的 Cloud Function 中,您只處理一個 Firestore 文檔。


只需使用包含文件名的其他字段并調整 Cleanbeans 的解決方案,如下所示:


exports.onProductUpdate = functions.firestore.document('Product/{productId}').onUpdate(async(snap, context) => {

? ? const deleteFileName = snap.before.data().fileName;

? ? const bucket = admin.storage().bucket();


? ? await bucket.file(deleteFileName).delete())


? ? return null;? ?// Don't forget to return null for example (or an Object or a Promise), to indicate to the platform that the CF can be cleaned up. See https://firebase.google.com/docs/functions/terminate-functions


});


查看完整回答
反對 回復 2023-08-05
  • 2 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號