我无法在“Success”函数中访问变量“k”的值,但在它之外,它显示正确的值,并且数组的内容也没有保留在同一个函数中。
日志中k的值总是等于nArray.length,这是我的FOR循环的条件。
这是Parse.com云代码的问题,还是我的代码有问题?
感谢阅读。
nArray = gameScore.get("myArray");
var query2 = new Parse.Query("User");
for (var k=1; k < nArray.length; k++) {
query2.equalTo("username", nArray[k]);
query2.find({
success: function(results) {
if (results.length !== 0) {
**alert("The value of k is" + k);** //the value of k here always is equal to the total # of loops
var object = results[0];
alert(object.id + ' - ' + object.get('email'));
var ema = object.get('email');
mArray.push(ema);
alert("Matched Contacts:" + mArray.length);
}
},
error: function() {
response.error("movie lookup failed");
}
});
alert(mArray.join('\n'));
alert("The value of k at bottom is correct" + k);
};
答案 0 :(得分:2)
问题是find
在循环结束时获得k
,因此k
具有最后一次迭代的值。你可以使用像这样的闭包
nArray = gameScore.get("myArray");
var query2 = new Parse.Query("User");
for (var k=1; k < nArray.length; k++)
{
(function(k){ // <-- define an inline function
query2.equalTo("username", nArray[k]);
query2.find({
success: function(results) {
if (results.length !== 0)
{
alert("The value of k is" + k);
var object = results[0];
alert(object.id + ' - ' + object.get('email'));
var ema = object.get('email');
mArray.push(ema);
alert("Matched Contacts:" + mArray.length);
}
},
error: function() {
response.error("movie lookup failed");
}
});
})(k); // <-- call it after definition using (k)
alert(mArray.join('\n'));
alert("The value of k at bottom is correct" + k);
};
我假设find
的参数是异步执行的回调,否则我无法解释你报告的行为。
如果是这种情况,请考虑mArray.join('\n')
无法按预期工作。