从Node JS的完成函数中忽略异常

时间:2019-09-12 12:05:53

标签: javascript node.js firebase asynchronous firebase-realtime-database

我正在尝试从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));
        })
}

为了使函数异步并等待结果,我缺少什么?

2 个答案:

答案 0 :(得分:0)

query.once(value)将立即返回一个承诺,即使您对该承诺调用then也是如此。这意味着您的函数将立即返回,并且查询将在一段时间后结束。如果您的函数执行异步工作,则应返回一个Promise,并且调用方应使用该Promise收集其包含的所有结果。

如果您正在考虑尝试使功能块直到查询完成,就不能简单地使异步工作异步化。所有的诺言都必须正确处理。

答案 1 :(得分:0)

找到了答案。我需要写“值”而不是值。