在循环浏览所有firebase结果以正确完成云功能后,如何获得返回?
var count = 0;
return ref.child('/records').once('value').then(snap=>{
snap.forEach(snapChild=>{
var ucName = ${snapChild.val().name.toUpperCase();
var update = {'name':ucName);
ref.child(`/records/${snapChild.key}`).update(update).then(()=>{
count++;
res.write(`<p>${ucName} updated</p>`);
});
})
}).then(()=>{
return res.end(`<p>end of list (${count} records)</p>`);
})
它实际上做了应该做的事情,但是计数器保持在0并且我得到一个错误&#39;写完了结束&#39; - 我想是因为forEach缺少回报。
答案 0 :(得分:1)
这是因为在未处理快照子项时调用了最后一个then
回调。您需要使用Array#map
生成一系列承诺,并Promise.all
等待所有承诺都未解决:
var count = 0;
return ref
.child('/records').once('value')
.then(snap => {
let ops = snap.map(snapChild => {
var ucName = ${snapChild.val().name.toUpperCase();
var update = {'name':ucName);
return ref.child(`/records/${snapChild.key}`).update(update).then(() => {
count++;
res.write(`<p>${ucName} updated</p>`);
});
});
return Promise.all(ops);
})
.then(()=>{
return res.end(`<p>end of list (${count} records)</p>`);
});