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