Firebase Firestore使用async/await无法按顺序写入数据求助
解决Firebase Cloud Function中Firestore写入顺序随机的问题
你的代码核心问题在于:scheduledFunction中直接并行调用了5次异步的updateMarketsData,没有等待前一个操作完成就执行下一个,导致写入操作的执行顺序随机。另外updateMarketsData里混用了await和.then(),虽然不影响功能,但代码逻辑不够清晰。
修改后的代码方案
1. 修正调度函数的执行顺序
将scheduledFunction声明为async函数,通过await依次调用updateMarketsData,确保前一个写入完成后再执行下一个:
exports.scheduledFunction = functions .pubsub.schedule("every 2 minutes").onRun(async (context) => { await updateMarketsData(1); await updateMarketsData(2); await updateMarketsData(3); await updateMarketsData(4); await updateMarketsData(5); return null; });
2. 优化异步函数的写法
去掉updateMarketsData中混用的.then()/.catch(),改用try/catch配合await,逻辑更统一:
/** * * @param {number} page */ async function updateMarketsData(page) { try { await firestore.collection(collectionId) .doc(docId).update({ markets_array: homeTimelineRequestText, }); console.log("markets_page_" + page + " successfully updated"); } catch (error) { console.error("Error writing document " + page, error); } }
3. 可选:用循环简化重复调用
如果后续需要扩展页数,用循环处理更简洁:
exports.scheduledFunction = functions .pubsub.schedule("every 2 minutes").onRun(async (context) => { for (let page = 1; page <= 5; page++) { await updateMarketsData(page); } return null; });
修改后,日志会严格按照markets_page_1到markets_page_5的顺序输出,保证后续逻辑能依赖正确的写入顺序执行。
内容的提问来源于stack exchange,提问作者Edmund Rojas
相关产品推荐
相关产品推荐

