【发布时间】:2018-12-03 05:15:58
【问题描述】:
我正在尝试使用 Promise.all() 同时执行多个 Firebase 云存储查询:
exports.onNewOrder =
functions.database.ref('/orders/{orderId}').onCreate(event => {
const data = event.val();
const orderedBy = data.ordered_by;
const creations = data.creations;
var promises = []
for (var entry of creations.entries()) {
var key = entry[0], value = entry[1];
var creationPromise = admin.database().ref("creations/"+ key);
creationPromise.once("value")
.then((crSnapshot)=>{
const crName = crSnapshot.val().name;
const created = crSnapshot.val().created;
return "crName+'\n'+created”;
}).catch((error) => {
console.log("creation details error : "+ error);
});
promises.push(creationPromise);
}
const userPromise = admin.database().ref("users/"+ orderedBy);
userPromise.once("value")
.then((snapshot) => {
var name = snapshot.val().name;
var email = snapshot.val().email;
const userDetails = name+'\n'+email;
return userDetails;
}).catch((error) => {
console.log("user details error :"+ error);
});
promises.push(userPromise);
return Promise.all(promises).then(results => {
console.log("results: " + results)
return true;
}).catch((error) => {
console.log("sendMail failed : "+ error);
});
});
我希望看到每个已执行承诺的完整查询结果,但是我得到的是以下内容:
结果:
https://....firebaseio.com/creations/cr_1bfd5f16212f44c792a2cbe3e9c6e4cc
https://....firebaseio.com/creations/cr_343c363c2a214487ba8cb7101653f6af
https://....firebaseio.com/creations/cr_e3f7a0bafd1542ac898d96e86155b94e
https://....firebaseio.com/users/us_5e4c28e18e63454c861caa5c4fe6a6f0
我错过了什么吗?
【问题讨论】:
-
顺便说一句,您的所有问题都没有被标记为已回答。接受答案并投票是我们必须鼓励其他用户在 SO 上帮助我们的少数几种方法之一;也使其他用户更容易找到有用的帖子。如果您对答案没有任何兴趣,为什么会有人抽出时间来写它们?
-
好点。如何将问题标记为已回答?
标签: node.js firebase firebase-realtime-database promise google-cloud-functions