我在下面的代码中缺少一些基本的回调/异步:为什么我会得到:
[,,'[ {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)
})
答案 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)
})