我有 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}`)
);
而且我还尝试将所有承诺结合起来:
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包含了应被复制的文件。
墨色风雨
相关分类