gpt4 book ai didi

javascript - Firestore复制功能,只复制1个文档

转载 作者:行者123 更新时间:2023-11-30 19:16:07 24 4
gpt4 key购买 nike

我有 2 个结构相同的集合,我想将文档从一个集合复制到另一个集合。当我第一次运行它时,它会复制其中一个项目,然后如果我多次运行它,它不会再复制任何东西。

exports.copyDocs = functions.https.onRequest((request, response) => {

let terminalIdToCopy = `123`; // terminal to be copied
let terminalId = `456`; // terminal for the copies to be added

let docsToCopy = db.collection(`/terminal/${terminalIdToCopy}/folderA/`);
let docsNewDir = db.collection(`/terminal/${terminalId}/folderB/`);

docsToCopy.get().then(snapshot => {
let result = [];
snapshot.forEach(doc => {
result.push(doc.data());
let promise = docsNewDir.doc(doc.id).set(doc.data())
});
response.status(200).send(`Copied items: ${JSON.stringify(result)}. From terminal ${terminalIdToCopy} to terminal ${terminalId}`);
}).catch(error => {
response.status(500).send(`Error: ${error}`);
});
});

我还尝试添加一个 .then(不打印日志消息):

docsNewDir.doc(doc.id).set(doc.data())
.then( i => { console.log(`i (${i})`)}, i2 => { console.log(`i2: ${i2}`);})
.catch(error =>
console.log(`Could NOT copy doc with id ${doc.id}: ${error}`)
);

而且我还尝试结合所有的 promise :

docsToCopy.get().then(snapshot => {
let result = [];
let promises = [];
snapshot.forEach(doc => {
result.push(doc.data());
promises.push(docsNewDir.doc(doc.id).set(doc.data()));
});
Promise.all(promises).then(values => {console.log("all done")}); // this won't print
response.status(200).send(`Copied items: ${JSON.stringify(result)}. From terminal ${terminalIdToCopy} to terminal ${terminalId}`);
}).catch(error => {
response.status(500).send(`Error: ${error}`);
});

result 包含所有应该被复制的文件。

最佳答案

您在使用 Promise.all() 方面走在了正确的轨道上,但是您的最终解决方案仍然需要仅在所有 promise 解决后才发送响应。您现在拥有的仍然是在完全解决任何问题之前发送响应,这会在函数完成之前终止该函数。你应该做更像这样的事情:

Promise.all(promises).then(values => {
console.log("all done")
response.status(200).send(`Copied items: ${JSON.stringify(result)}. From terminal ${terminalIdToCopy} to terminal ${terminalId}`);
});

关于javascript - Firestore复制功能,只复制1个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993466/

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