忽略 Node JS 上已完成函数的异常

我正在尝试从我的 firebase db 表中删除投票,据我所知,这是一个需要时间的异步请求,尽管我的函数早于结束,所以我收到以下错误 -


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));

        })

}

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


哈士奇WWW
浏览 180回答 2
2回答

跃然一笑

query.once(value)立即返回一个承诺,即使你调用then了那个承诺。这意味着您的函数会立即返回,并且查询会在一段时间后完成。如果你的函数执行异步工作,它应该返回一个承诺,调用者应该使用这个承诺来收集它包含的任何结果。如果您正在考虑在查询完成之前尝试使您的功能块,您不能简单地使 async 工作异步。必须正确处理所有承诺。

繁星coding

找到了答案。我需要写“价值”而不是价值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript