-1

我无法访问函数“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);
};
4

1 回答 1

2

问题是循环结束时的findget具有最后一次迭代的值。你可以使用这样的闭包kk

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')不会像您预期的那样工作。

于 2013-06-18T00:59:33.093 回答