javascript - Firebase 函数在同一个 onCall 函数中读取和添加数据
问题描述
我有一个在单击按钮时触发的功能。根据 docId,我可以在 Firestore 中检索正确的下载 URL。但我也想更新我的“客户”集合中的特定字段(availableDownloads)。我无法让它工作。
这段代码工作正常。它返回下载网址。
exports.getDownloadUrl = functions.https.onCall(async(data, context) => {
var docRef= await db.collection('projects').doc(data.docId);
return docRef.get().then(function(doc){
const downloadURL = doc.data().downloadURL;
return downloadURL;
}).catch(function(error) {
// Handle error
});
});
然而事实并非如此。它返回空
exports.getDownloadUrl = functions.https.onCall(async(data, context) => {
var docRef= await db.collection('projects').doc(data.docId);
return docRef.get()
.then(async function(doc){
const downloadURL = doc.data().downloadURL;
const userRef = await db.collection('customers').doc(context.auth.uid);
return userRef.update({
availableDownloads: admin.firestore.FieldValue.increment(-1)
}).then(()=> {
return downloadURL;
}).catch((error)=> {
})
}).catch(function(error) {
// Handle error
});
});
解决方案
我首先想到.update()
的是一个异步函数,所以你需要一个await
在userRef.update(...)
.
您还应该考虑坚持使用箭头函数 ( () => {}
) 或匿名函数 ( function () {}
),但这只是一种风格说明。:)
ETA:正如 Frank van Puffelen 指出的那样,您不需要s来await
简单地声明 DocumentReference,因为它们不是异步函数。(看线var docRef= await db.collection('projects').doc(data.docId);
)。
推荐阅读
- php - MySql插入查询错误:参数号无效:参数未定义
- bash - Bash:如何读取和选择具有特定数字的行?
- database - 多主到单从复制
- ruby-on-rails - 尝试保存 cookie 时没有路由匹配 [POST]“/locations/new”错误
- python - 如何在列表中的google中搜索关键字并提取数据
- android - Xamarin - android:找不到资源
- excel - 如何从地址方法中获取完整的返回值?
- javascript - 加载 DOM 页面后将所有复选框设置为 true
- scala - 从 UDF 中的 Dataframe 创建一列 ArrayType[StructType]
- hololens - HoloLens2:我想在用户正在看的表面网格上绘制一个目标