for循环外的异步变量

时间:2013-04-04 16:33:34

标签: javascript ajax variables asynchronous for-loop

我刚刚开始使用AJAX,我试图在for循环中设置一个变量。然后我想稍后调用该变量并使用它的值。

当然这是同步的,要求脚本停止执行以便在返回函数的新值之前运行循环。

我希望有人知道在for循环运行之后从for循环中获取值的更好方法,然后在我的代码中直接使用它。

我不想使用setTimeout()黑客来绕过这个问题(毕竟这是一个黑客攻击)。

var getCount = function getCount(res) {
    count = { active: 0, closed: 0 }; //Variable defined here

    for(i=0; i<=res.length; i++) {
        if(res[i].status == 'active') {
            count.active ++;
        } else { count.closed ++; }
    }
    return count; //And returned here
};

getCount(result);

console.log(count); //Here's where I need the result of the for loop

//Currently this outputs the count object with both properties set to 0;

3 个答案:

答案 0 :(得分:2)

我不确定AJAX与您的问题有什么关系。

您没有将getCount函数的结果赋给count变量(除非您希望count变量是全局变量,但在这种情况下,您需要在getCount函数定义之前定义它。)

更改此行:

getCount(result);

到此:

var count = getCount(result);

你应该没事。 :)

我还建议,在声明变量时,总是用var声明它们。在你的情况下:

var count = { active: 0, closed: 0};

答案 1 :(得分:0)

我不知道为什么你提到AJAX,因为你的代码没有异步。 从我在你的样本中看到的,我看不出所有困难是什么。

只需将其用作任何其他功能。

function getCount(res) {
    var count = { active: 0, closed: 0 }; //Variable defined here

    for(i=0; i<=res.length; i++) {
        if(res[i].status == 'active') {
            count.active ++;
        } else { count.closed ++; }
    }
    return count; //And returned here
};

console.log(getCount(result)); //Here's where I need the result of the for loop

答案 2 :(得分:0)

首先,您有一个额外的=符号过度扩展您的for循环。我不知道这是否能解决您的异步问题,但我会这样做:

// sample object
var result = [
  {status:"active"},
  {status:"not-active"},
  {status:"active"} 
];

// kick off the function to get the count object back
var counts = getCount(result);

console.log(counts);


function getCount(res) {
    var count = { active: 0, closed: 0 }; //Variable defined here, make sure you have var to keep it from going global scope

    for(i=0; i<res.length; i++) { //here you had a wrong "="
        if(res[i].status === 'active') {
            count.active ++;
        } else { count.closed ++; }
    }
    return count; //And returned here
}

示例here