node.js:将异步返回放在一个对象或数组中

时间:2016-09-06 14:39:20

标签: json node.js

我在下面的代码中缺少一些基本的回调/异步:为什么我会得到:

[,,'[ {JSON1} ]']

[,,'[ {JSON2} ]']

(= 2个控制台返回)而不是只有一个控制台返回一个正确的表,这是我想要的,看起来像:

[,'[ {JSON1} ]','[ {JSON2} ]']

或理想情况:

[{JSON1},{JSON2}]

请参阅下面的代码,getPTdata是我创建的一个函数,用于通过REST API(https请求)检索一些JSON。我无法一次性获取所有内容,因为我正在谈论的API有一个限制,因此我的调用的限制和偏移参数。

offsets = [0,1]
res = []

function goGetData(callback) {
    for(var a = 0; a < offsets.length; a++){
        getPTdata('stories',
                  '?limit=1&offset='+offsets[a]+'&date_format=millis',
                  function(result){
            //called once getPTdata is done
            res[a] = result
            callback(res)
        });
    }
}

goGetData(function(notgoingtowork){
    //called once goGetData is done
    console.log(res)
})

1 个答案:

答案 0 :(得分:0)

像这样解决:

offsets = [0,1]
res = []

function goGetData(callback) {

    var nb_returns = 0
    for(var a = 0; a < offsets.length; a++){
        getPTdata('stories','?limit=1&offset='+offsets[a]+'&date_format=millis', function(result){
            //note because of "loop closure" I cannot use a here anymore 
            //called once getPTdata is done, therefore we know result and can store it
            nb_returns++
            res.push(JSON.parse(result))
            if (nb_returns == offsets.length) {
                callback(res)
            }
        });
    }
}


goGetData(function(consolidated){
    //called once goGetData is done
    console.log(consolidated)
})