我遇到了一些我希望可以工作的代码的问题。我在函数外部定义了一个变量,因此希望它可以通过继承被函数使用。我在函数外部控制台记录变量并在函数内部获取值和控制台日志并获得未定义。我在代码中使用注释来显示这些控制台日志。这里的任何帮助都会很棒。请参阅下面的代码片段。谢谢 Ant
for (var i = 0; i < parseResult.length; i++) {
var destination = parseResult[i].attributes.userInfo;
for (var i = 0; i < firebaseResult.length; i++) {
if (firebaseResult[i].$id == parseResult[i].attributes.facebookID) {
parseResult[i].attributes.convoID = firebaseResult[i].convoID;
console.log(firebaseResult[i].time); // this returns the timestamp value
parseResult[i].attributes.lastMessage = FirebaseAPI.getLastMessage(firebaseResult[i]).$loaded()
.then(function(lastMessage) {
console.log(firebaseResult[i].time); // this returns undefined
if (!(0 in lastMessage)) {
var returnValue = 'Matched on ' + firebaseResult[i].time;
} else if (0 in lastMessage) {
var returnValue = lastMessage[0].message;
}
return returnValue;
})
.catch(function(error) {
console.log("Error:", error);
})
}
}
}
最佳答案
使用循环迭代器访问异步回调中的东西通常是不可靠的,因为当回调返回时,i
会增加到让它退出循环的值。
修复方法是将它分配给您想要保存的任何变量。
console.log(firebaseResult[i].time); // this returns the timestamp value
var time = firebaseResult[i].time;
parseResult[i].attributes.lastMessage = FirebaseAPI.getLastMessage(firebaseResult[i]).$loaded()
.then(function(lastMessage) {
console.log(firebaseResult[i].time); // this returns undefined
console.log(time);
关于Javascript变量继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31133613/