Javascript Firebase未将数据保存在“中”;for loop";意外跳出循环。可能原因回调

Javascript Firebase未将数据保存在“中”;for loop";意外跳出循环。可能原因回调,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我是Firebase的新手,所以我会尽我所知尽力解释 背景 我正在学习javascript和Firebase来开发webapp。www.frenly.io (此数据库功能未部署到生产环境中) 基本功能是从个人资料中获取所有youtube链接,并将其列为播放列表 直到这里一切都很好。但每次用户重新加载页面时,都必须向facebook查询相同的链接,因此我决定在第一次查询后保存链接 function getallLinksFromDB(userID,callback){ var li

我是Firebase的新手,所以我会尽我所知尽力解释

背景

我正在学习javascript和Firebase来开发webapp。www.frenly.io (此数据库功能未部署到生产环境中) 基本功能是从个人资料中获取所有youtube链接,并将其列为播放列表

直到这里一切都很好。但每次用户重新加载页面时,都必须向facebook查询相同的链接,因此我决定在第一次查询后保存链接

function getallLinksFromDB(userID,callback){
        var linksCurrentlyInPlaylist;
        searchForPlaylist(userID,function(result){
            if(result == false){
                callback(false);
            }
            else{
                linksCurrentlyInPlaylist =result;
                // console.log(linksCurrentlyInPlaylist);
                callback(linksCurrentlyInPlaylist);
            }
        });

    }

getallLinksFromDB(userID,function(result){
if(result != false){
songFrom = "DB";
    processSongsForNewFrenDB(userID, newuserName, userPic, result, songFrom, songNum);
    }
}
processSongsForNewFrenDB
函数中,我处理数据库中的链接并将其显示在播放列表中。另外,我在末尾有一个分页按钮,可以从facebook获取新的链接,并将其添加到播放列表中

问题

当我第一次在数据库中保存链接,重新加载页面,从fb获取新数据,然后继续在数据库中保存新链接时,就会出现问题

processSongsForNewFrenDB
中,还有另一个名为
processAllLinks
的函数。在播放列表中显示所有链接后,链接和详细信息将转换为数组并提供给另一个函数,该函数将在数据库中保存链接<代码>添加播放列表

这是完整的
AddToPlaylist
功能

function AddToPlaylist(youtubeLinksDetailArray, id, linksArray) {
    var plylstForUser = id + 'default';
    var totalLinks = linksArray.length;
            for (i = 0; i < totalLinks; i++) {

                console.log('saving in linkpool'+i);
                linksPool.child(youtubeLinksDetailArray[i].id).set({
                    'ID': youtubeLinksDetailArray[i].id,
                    'createdTime': youtubeLinksDetailArray[i].created_time,
                    'link': youtubeLinksDetailArray[i].link
                });
                console.log('saving in playlist'+i);
                playlist.child(plylstForUser).child("LinksID").child(linksArray[i]).set({
                    'LinkID': linksArray[i]
                });
            }
}
我不确定这是什么原因造成的。 另一件事是,如果我不将值保存在
linksPool
表中,而只将其保存在
播放列表
表,则不会发生此行为

我猜这可能是由于回调使用不当造成的,但如果是这样的话,我不知道为什么要删除

linksPool.child(youtubeLinksDetailArray[i].id).set({
                        'ID': youtubeLinksDetailArray[i].id,
                        'createdTime': youtubeLinksDetailArray[i].created_time,
                        'link': youtubeLinksDetailArray[i].link
                    });
from
AddToPlaylist
函数似乎可以工作


感谢您的帮助。这个问题已经困扰了两天。

由于代码片段的原因,很难解析代码中的内容。请尝试创建一个(阅读链接,它非常有用)。这意味着您将从一块空白的石板开始,在没有任何应用程序逻辑的情况下重现问题。充其量这将帮助你发现你的问题,因为你正在孤立它。最糟糕的是,它会给你一段完美的代码与我们分享。嗨,弗兰克,谢谢你的建议。我照你说的做了,看起来问题不是Firebase保存数据,而是调用了
getallLinksFromDB
。当我对该函数进行注释时,数据已正确保存。我仍在按照您的建议进行调试。将更新发现。经过更多的调查,我已经设法解决了这个问题。虽然我还不能解决问题的根源,但至少我的数据正在按应有的方式保存。当循环中断并转到另一个函数时,出现了另一个循环,并且计数器变量是相同的“i”,因此我将其中一个变量更改为“q”,并正确保存了数据。
linksPool.child(youtubeLinksDetailArray[i].id).set({
                        'ID': youtubeLinksDetailArray[i].id,
                        'createdTime': youtubeLinksDetailArray[i].created_time,
                        'link': youtubeLinksDetailArray[i].link
                    });