我从中收到一个包含产品ID列表及其数据库引用的对象,所以我必须在数据库中搜索每种产品以获取其价格,我已经尝试过类似的方法
handleDownload = () => {
console.log("clicked download")
fetch(`${API_URL}/Results`,
{
method: 'GET'
})
}
问题在于,const functions = require('firebase-functions');
const cors = require('cors')({
origin: true
});
const admin = require('firebase-admin');
var request = require('request');
admin.initializeApp();
exports.GeraPagSeguro = functions.https.onRequest((req, res) => {
cors(req, res, () => {
if (req.method === 'POST') {
var xml;
req.body.map((product) => {
admin.database().ref(product.refitem).once('value', (snapshot) => {
const value = snapshot.val();
const price = value.price;
xml += price;
//rest of code building the xml i want
})
})
//rest of code sending the xml via POST to other server
})
})
})
的所有承诺都没有wait
的其余代码。
答案 0 :(得分:1)
由于firebase数据库函数返回了Promise
,因此您可以将函数转换为异步函数并对其调用await
。像这样:
exports.GeraPagSeguro = functions.https.onRequest(async (req, res) => {
cors(req, res, () => {
if (req.method === 'POST') {
var xml;
req.body.map((product) => {
const snapshot = await admin.database().ref(product.refitem).once('value')
const value = snapshot.val();
const price = value.price;
xml += price;
//rest of code building the xml i want
})
//rest of code sending the xml via POST to other server
})
})
})
然后,您可以执行其他代码,如“等待” firebase操作一样
注意:默认Firebase功能设置中未启用异步功能,您需要在{{1}中将emcaVersion
指定为2017或8(默认为7) }文件,以确保与异步相关的功能正常工作。它应该看起来像这样:
.eslintrc.json
除此之外,您还需要添加{
"parserOptions": {
"ecmaVersion": 2017 //or 8
}
}
作为插件,如下所示:
promise
如果"plugins": [
"promise"
]
中有任何指定.eslintrc.json
使用情况的内容,请将其更改为es6
。
答案 1 :(得分:1)
要等待多个异步操作完成,请使用)
:
Promise.all()