在 foreach 中请求 API
request api in foreach
我有一个数据array
,我使用 request
查询api
。在对发出的请求的每个响应之后执行callback
。但是,在这样做的过程中,我最终会为数组中的所有项目发起并行请求。这是我正在做的事情:
exports.getData = function(arr, cb){
arr.forEach(function(data){
var query = {
//some data here
};
request({
url: 'http://x/y',
json: query,
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}, function(error, res, body){
if (error){
console.log(error);
} else{
cb(res.body);
}
});
});
};
我想在上面的代码中setTimeOut
x seconds
。我应该在每个请求后实施天真的延迟吗?还是别的什么?
更新:并行请求到一系列请求。
你应该使用一系列请求。 使用async
模块。见下文
exports.getData = function(arr, cb){
// make an array of function
var funcArray = [];
arr.forEach(function(data){
var query = {
//some data here
};
funcArray.push(function(callback){
request({
url: 'http://x/y',
json: query,
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}, function(error, res, body){
// 5 second interval for each request
setTimeout(function(){ callback(error, body); }, 5000);
});
});
});
// now run all tasks on series
async.series(funcArray,function(err, result){
// now you will get result for all request
// handle error
// do what ever you want with result
});
}
forEach 循环理想情况下会立即结束,因此您可以先在 queryPool 中添加所有查询参数,然后逐个执行它们。
您可以参考此代码。
exports.getData = function(arr, cb){
var queryPool = [];
function execQuery(){
if(queryPool.length == 0) return
var query = queryPool.slice(0,1)
queryPool = queryPool.slice(1,queryPool.length)
request({
url: 'http://x/y',
json: query,
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}, function(error, res, body){
if (error){
console.log(error);
} else{
cb(res.body);
}
execQuery();
});
}
arr.forEach(function(data){
var query = {
//some data here
};
queryPool.push(query);
});
execQuery();
};
此代码假定请求中给出的函数在所有条件(失败或成功)中执行。
相关文章:
- 跨节点服务器上的多个 API 请求维护数据
- 在 Google 云端硬盘 API 请求中使用参数
- Angularjs的异步API请求
- 如何将头添加到ActiveResource以创建API请求
- Flux+Rreact.js-缓存API请求响应
- JavaScript中的Google Drive API请求
- API请求在使用phonegap调试时不工作,但在模拟器中工作,为什么
- 使用Jquery将JSON API请求的元素传递给数组
- 如何将访问令牌用于Facebook Opengraph javascript SDK api请求
- 从多个API请求推送到全局数组
- 确定 API 请求的来源
- 如何将 API 请求中的 JSON 获取到页面的 javascript 中
- 跟踪 Google 可视化 API 请求中的事件
- 为什么此 Google 日历 API 请求不返回开始时间等事件数据
- 取消以前由 ng-change 创建的 api 请求
- 来自 HTML/js 项目中的 .dll / .aspx 文件的 API 请求
- GiantBomb API 请求获取 HTML 而不是 JSON,Nodejs 请求模块
- 在 Angular JS 服务中调用 YouTube API 请求
- 如何限制 api 请求堆栈
- Javascript:具有多个查询参数的嵌套 JSON api 请求