从多个API请求推送到全局数组
Push to global array from multiple API requests
我有一个函数调用一个分页的API。它对第一个页面进行初始调用,然后使用响应中返回的next
url继续对后续页面进行请求。它一直这样做,直到next
变成null
。我正在尝试从响应中提取数据(城市名称),并将这些数据推送到全局数组中。
我的代码目前看起来是这样的:
var results = [];
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
nextPage(data.next);
$.each(data.results, function (k, v) {
results.push(v.city_name);
});
});
}
nextPage('http://url.com/api/v1/cities/?page=1');
console.log(results);
假设我有两页JSON,如下所示:
第1页
{
"count": 105,
"next": "http://url.com/api/v1/cities/?page=2",
"previous": null,
"results": [
{
"city_name": "Paris"
},
{
"city_name": "Brussels"
}
]
}
第2页
{
"count": 105,
"next": null,
"previous": "http://url.com/api/v1/cities/?page=1",
"results": [
{
"city_name": "Manchester"
},
{
"city_name": "Curitiba"
}
]
}
我希望阵列看起来像这样:
["Paris", "Brussels", "Manchester", "Curitiba"]
但是,当我将results
记录到控制台时,数组是空的。有人能帮忙吗?如果你需要更多信息,请告诉我。干杯
以下是我建议您如何使用jQuery promises:
function getCities(initialUrl) {
var results = [];
function nextPage(url) {
return $.ajax(url, {method: "POST", data: {json: src[cntr++]}}).then(function(data) {
$.each(data.results, function (k, v) {
results.push(v.city_name);
});
if (data.next) {
return nextPage(data.next);
} else {
return results;
}
});
}
return nextPage(initialUrl);
}
getCities('http://url.com/api/v1/cities/?page=1').then(function(results) {
console.log(results);
}, function(err) {
// handle error here
});
这允许您调用then函数,然后从该函数中获取数据以用于其他代码。它还提供了一个错误处理路径。
getCities函数获取第一个URL,然后返回一个promise,该promise在实现值时使用结果数组进行解析。
内部nextPage()
函数获取下一个URL。我测试了它在结果中获得的url,然后在链接下一个承诺到原始承诺的url上再次调用自己,或者返回最终结果作为承诺的最终实现值。
如注释中所述,console.log
在请求完成之前执行。相反,你会想做这样的事情:
var results = [];
function nextPage(url) {
if (!url) {
return;
}
$.getJSON(url, function(data) {
$.each(data.results, function (k, v) {
results.push(v.city_name);
});
if(data.next){
// There is a next page, continue:
nextPage(data.next);
}else{
// You're done:
console.log(results);
}
});
}
nextPage('http://url.com/api/v1/cities/?page=1');
相关文章:
- node.js全局数组与redis
- 是socket.io异步的-我需要锁定全局数组/变量吗
- 如何在另一个函数调用中设置全局数组值
- 带有jquery .push的Javascript全局数组在备用函数中返回空数组
- 将对象插入到全局数组
- 从多个API请求推送到全局数组
- 如何在 JavaScript 中声明和初始化全局数组
- 无法使用 JavaScript 将值读入全局数组变量
- Javascript 全局数组无缘无故地变为未定义
- 使用Phonegap全局数组的Javascript不起作用
- 将 JSON 文件读取到对象的全局数组中 - 范围和同步问题
- 节点.js不能使用 promise、Mongoose 和 GET 请求推送到全局数组
- Javascript 全局数组在 JSON 结果函数中不可见
- 如何定义全局数组
- 新数组覆盖全局数组
- mysql导致javascript全局数组
- 从Jquery$.getJSON方法获取数组的全局数组到REUSE数组
- Javascript将Object推送到全局数组会覆盖以前的值
- 对影响作为参数传递的全局数组的函数参数使用.shift()
- 使用THRE.JS对象的全局数组的Javascript内存管理