gpt4 book ai didi

javascript - 在完成 foreach 之前完成 Firebase 云功能

转载 作者:行者123 更新时间:2023-11-29 22:45:58 25 4
gpt4 key购买 nike

我想用一些新变量更新“预订”列表。但是我无法让它工作,因为该功能在更新之前就结束了。我知道问题是因为我进行了异步调用但我无法解决它。在这种情况下如何使用 Promise?

我使用 Promise 编辑了代码,但仍然没有更新“预订”将 {"data": null} 返回到我的网站控制台在 firebase 控制台中不会产生任何错误。返回消息“reservations actualized”

exports.actualizeReservations = functions.https.onCall((data, response) => {
var promisesUpdateReservations = [];
return admin.database().ref(Constants.RESERVATIONS).once("value")
.then((snapshot) => {
console.log("RESERVATIONS: " + snapshot)
snapshot.forEach((reserveSnap) => {
var reserve = reserveSnap.val();
if(reserve.reservationId && reserve.restoId) {
admin.database().ref(`${Constants.RESTAURANTS}/${reserve.restoId}`).once("value")
.then((restoSnap) => {
if(restoSnap.exists() && restoSnap.val() !== null) {
var resto = restoSnap.val();
if(resto.address && !resto.address.fullAddress) {
var restoAddress = resto.address ? {
street: resto.address.street ? resto.address.street : "",
fullAddress: resto.address.fullAddress ? resto.address.fullAddress : "",
city: resto.address.city ? resto.address.city : "",
country: resto.address.country ? resto.address.country : "",
postalCode: resto.address.postalCode ? resto.address.postalCode : "",
province: resto.address.province ? resto.address.province : "",
l: resto.l ? resto.l : null,
g: resto.g ? resto.g : null,
} : null;
var restoUserIDs = `${reserve.restoId}/${reserve.userId}`;
const promiseUpdateReservation = admin.database().ref(`${Constants.RESERVATIONS}/${reserve.reservationId}`).update({
restoAddress,
restoUserIDs
})
promisesUpdateReservations.push(promiseUpdateReservation)
}
}
})
.catch((err) => {
console.log("resto not found")
});
}
});
Promise.all(promisesUpdateReservations)
.then(() => {
console.log("reservations actualized");
return { code: 0, result: "successful", description: "reservations actualized" };
})
})
.catch((err) => {
console.log("get restaurants error: " + err);
return { code: 1, result: "successful", description: "reservations not loaded" };;
});
})

最佳答案

此函数将在每次调用时立即完成,并且可能不执行任何工作。这是因为它根本没有从顶级函数回调中返回任何内容。相反,您需要从函数的顶层返回一个 promise ,该 promise 仅在 all 异步工作完成后(并且您开始了很多在这里)。正确处理 promise 对于使 Cloud Functions 正常工作至关重要。

关于javascript - 在完成 foreach 之前完成 Firebase 云功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com