使用带有节点异步的 $.getJSON 到运行带有 jsonp 响应的 node/express 的服务器时,我遇到了一个奇怪的错误。
我使用节点异步迭代数组对服务器进行了两次调用,但是当所有操作完成后,第二个结果具有一些包含第一个值的属性。
奇怪的是服务器端响应正在返回 - 因为返回的属性之一是正确的 - 但另一个属性看起来在第二次调用时被第一次调用的属性覆盖。
在服务器端,我已经对其进行了调试并检查了返回正确结果的 res.jsonp 行,我还使用一些控制台日志记录服务器端对其进行了检查。
下面的代码 - TLDR 结果如下:
//Expecting results to be:
[
{"series":1, options:{serverSays:"Here is series 1"},data: [a:1,b:2,c:3]},
{"series":2, options:{serverSays:"Here is series 2"}, data: [x:9, y:8, z:7]}
]
//Actual Results are
[
{"series":1, options:{serverSays:"Here is series 1"}, data: [a:1,b:2,c:3]},
{"series":2, options:{serverSays:"Here is series 2"}, data: [a:1,b:2,c:3]}
]
这是代码的简化版本(删除了很多垃圾,但逻辑保持不变):
var series = [
{id: 1},
{id: 2}
]
var results = [];
//A function to get data from the server and return it
function getData(id, cb)
{
var url = serverUrl + "/GetSomeData/" + id;
$.getJSON(url)
.done(function (serverResponse)
{
console.log("Response from server: ", serverResponse)
cb({"series": id, options: serverResponse.options, data: serverResponse.data});
}
}
//A function to iterate through the series using async.forEach
function iterator(s, callback)
{
getData(s.id, function(data)
{
//Use the data
results.push(data);
//Tell async we are done with this iteration
callback()
});
}
function done(err)
{
console.log("Finished");
//Expecting results to be
//[
// {"series":1, options:{serverSays:"You Requested Series 1"},data: [a:1,b:2,c:3]},
// {"series":2, options:{serverSays:"You Requested Series 2"}, data: [x:9, y:8, z:7]}
//]
//Actual Results are
//[
// {"series":1, options:{serverSays:"You Requested Series 1"}, data: [a:1,b:2,c:3]},
// {"series":2, options:{serverSays:"You Requested Series 2"}, data: [a:1,b:2,c:3]}
//]
}
async.eachSeries(series, iterator, done);
我已经尝试使用异步系列、异步并行以及 promise 样式 getJSON 和回调样式 getJSON - 都显示相同的错误。
可能是我的客户端代码,或者我正在对服务器端 jsonp 做一些愚蠢的事情。
服务器端,我建立数据然后去
return res.jsonp(output);
有什么想法吗?