我正在尝试从Firebase数据库表中删除投票,并且据我了解,这是一个耗时的异步请求,尽管我的函数比之前结束了,所以出现以下错误-
Ignoring exception from a finished function
这是我的功能代码-
function continueDeleteFromFirebaseVotesDB(videoId, contestId) {
console.log("before query declaration");
var query = database.ref("votes/" + contestId).orderByKey();
console.log("before foreach loop")
query.once(value)
.then(function (snapshot) {
console.log("inside foreach loop")
if (!snapshot.exists) {
console.log("votes db snapshot does not exist");
return;
}
snapshot.forEach(function (childSnapshot) {
//var key = childSnapshot.key;
// childData will be the actual contents of the child
var childData = childSnapshot.val();
if (childData.video_id === contestId) {
childSnapshot.ref.remove();
console.log("removed vote - " + JSON.stringify(childSnapshot))
continueDeleteFromFirebaseVideosDB(videoId)
}
});
return query;
})
.then(function (data) {
console.log(JSON.stringify(data));
})
}
为了使函数异步并等待结果,我缺少什么?
答案 0 :(得分:0)
query.once(value)
将立即返回一个承诺,即使您对该承诺调用then
也是如此。这意味着您的函数将立即返回,并且查询将在一段时间后结束。如果您的函数执行异步工作,则应返回一个Promise,并且调用方应使用该Promise收集其包含的所有结果。
如果您正在考虑尝试使功能块直到查询完成,就不能简单地使异步工作异步化。所有的诺言都必须正确处理。
答案 1 :(得分:0)
找到了答案。我需要写“值”而不是值。