我需要从列表中删除一个项目,但以下代码不起作用:
exports.removeOldItems = functions.database.ref('/chat/usersOnline/{userId}')
.onWrite(event => {
const snap = event.data;
if (!snap.exists()) return;
snap.forEach(it => {
if ( condition ) {
it.ref.remove(); <---- THIS NOT WORK
}
})
});
陈述&#34; it.ref.remove()&#34;运行但不删除子项。可能有什么不对?
更新
我不知道为什么,但使用parent.once(...)解决了这个问题:
exports.removeOldItems = functions.database.ref('/chat/usersOnline/{userId}')
.onWrite(event => {
if (!event.data.exists()) return;
const parentRef = event.data.ref.parent;
return parentRef.once('value').then(users => {
users.forEach(function(tabs) {
tabs.forEach(instance => {
if ( condition ) {
instance.ref.remove();
}
})
});
});
});
我使用以下示例作为指南:https://github.com/firebase/functions-samples/blob/master/limit-children/functions/index.js
答案 0 :(得分:1)
这可能会发生,因为你没有回复承诺。 尝试这样的事情。
exports.removeOldItems = functions.database.ref('/chat/usersOnline/{userId}')
.onWrite(event => {
const snap = event.data;
var itemstoremove = [];
if (!snap.exists()) return;
snap.forEach(it => {
if ( condition ) {
itemstoremove.push(it.ref.remove()); <---- THIS NOT WORK
}
})
return Promise.all(itemstoremove);
});