gpt4 book ai didi

node.js - Firestore 更新文档字段并立即响应获取旧数据的问题

转载 作者:太空宇宙 更新时间:2023-11-04 01:21:21 24 4
gpt4 key购买 nike

我正在尝试更新 firestore 字段值。它正在更新,但我想立即使用更新的文档。当我当时获取这些数据时,它会在我第一次访问 api 时从 Firestore 提供旧数据。如果我两次点击同一个 api,那么我将获得更新的数据。

所以,我不明白实际问题是什么

updateProductDetail: async(req, res)=>{
console.log("reqeuest", req.body.creator);
try {
var productFilterArray = [];
var counter = 0;
let collectionRef = db.collection("product_details_temp");
let query = collectionRef.where('creator', '==', req.body.creator).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
} else {
snapshot.forEach(doc => {
db.collection("product_details_temp").doc(doc.id).update({ "product": req.body.product });
});

collectionRef.where('creator', '==', req.body.creator).get()
.then(snapshot => {
let a =[];
snapshot.forEach(doc => {
// a = doc.data();
a.push(doc.data());
});
res.send(functions.responseGenerator(200, "successfull", a));
})
}
})
} catch (error) {
res.send(
functions.responseGenerator(error.code, error.message, error.data)
);
}

请帮助我

最佳答案

听起来您有两个操作:

  1. 写操作
  2. 查询/读取操作必须看到写入操作的结果

从 Firestore 读取数据或向 Firestore 写入数据的代码异步运行。为了防止阻塞应用程序,当读/写操作在后台运行时,允许您继续正常的代码流。这意味着查询/读取当前在您的代码中运行,写入操作尚未完成,因此您在查询中看不到该写入操作的结果。

解决方案是等到写入操作完成后再开始查询。您已经在查询中执行了此操作,其中使用 .then(snapshot => { 构造来等待结果。您需要对 update(.. .) 调用,例如:

  let collectionRef = db.collection("product_details_temp");
let query = collectionRef.where('creator', '==', req.body.creator).get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
} else {
let promises = [];
snapshot.forEach(doc => {
promises.push(db.collection("product_details_temp").doc(doc.id).update({ "product": req.body.product }));
});
Promise.all(promises).then(() => {
collectionRef.where('creator', '==', req.body.creator).get()
.then(snapshot => {
let a =[];
snapshot.forEach(doc => {
a.push(doc.data());
});
res.send(functions.responseGenerator(200, "successfull", a));
})
})
}

这里的主要变化:

  • 此代码在 promises 数组中捕获 update 调用的结果。这为我们提供了一个 promise 列表,这些 promise 在写入操作完成时解析。
  • 然后,它使用 Promise.all() 等待所有写入操作完成,然后再开始查询。

关于node.js - Firestore 更新文档字段并立即响应获取旧数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59210687/

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