多次调用相同的函数并处理合并的结果集
Call same function many times and process combined result set
我需要发出多个 API 请求,然后对组合结果集进行一些处理。在下面的示例中,您可以看到通过复制相同的请求代码发出了 3 个请求(到 /create),但是我希望能够指定发出多少请求。例如,我可能希望 运行 同一个 API 调用 50 次。
如何在不重复 API 调用函数 n 次的情况下进行 n 次调用?
async.parallel([
function(callback){
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
},
function(callback){
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
},
function(callback){
request.post('http://localhost:3000/api/store/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
}
],
function(err, results){
if (err) {
console.log(err);
}
// do stuff with results
});
创建一个数组,其中包含对函数的 引用 ,因为您需要在工作负载中执行任务。然后将它们传递给 async.parallel
。例如:
var async = require("async");
var slowone = function (callback) {
setTimeout(function () {
callback(null, 1);
}, 1000);
};
async.parallel(
dd(slowone, 100),
function (err, r) {
console.log(JSON.stringify(r));
}
);
// Returns an array with count instances of value.
function dd(value, count) {
var result = [];
for (var i=0; i<count; i++) {
result.push(value);
}
return result;
}
再次注意,尽管有许多 引用 ,但只有一个慢 运行 函数的实例。
首先,将要多次调用的代码包装在一个函数中:
var doRequest = function (callback) {
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err);
}
callback(null, res.body.id);
});
}
然后,使用async.times函数:
async.times(50, function (n, next) {
doRequest(function (err, result) {
next(err, result);
});
}, function (error, results) {
// do something with your results
}
我需要发出多个 API 请求,然后对组合结果集进行一些处理。在下面的示例中,您可以看到通过复制相同的请求代码发出了 3 个请求(到 /create),但是我希望能够指定发出多少请求。例如,我可能希望 运行 同一个 API 调用 50 次。
如何在不重复 API 调用函数 n 次的情况下进行 n 次调用?
async.parallel([
function(callback){
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
},
function(callback){
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
},
function(callback){
request.post('http://localhost:3000/api/store/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err, null);
}
callback(null, res.body.id);
});
}
],
function(err, results){
if (err) {
console.log(err);
}
// do stuff with results
});
创建一个数组,其中包含对函数的 引用 ,因为您需要在工作负载中执行任务。然后将它们传递给 async.parallel
。例如:
var async = require("async");
var slowone = function (callback) {
setTimeout(function () {
callback(null, 1);
}, 1000);
};
async.parallel(
dd(slowone, 100),
function (err, r) {
console.log(JSON.stringify(r));
}
);
// Returns an array with count instances of value.
function dd(value, count) {
var result = [];
for (var i=0; i<count; i++) {
result.push(value);
}
return result;
}
再次注意,尽管有许多 引用 ,但只有一个慢 运行 函数的实例。
首先,将要多次调用的代码包装在一个函数中:
var doRequest = function (callback) {
request.post('http://localhost:3000/create')
.send(conf)
.end(function (err, res) {
if (err) {
callback(err);
}
callback(null, res.body.id);
});
}
然后,使用async.times函数:
async.times(50, function (n, next) {
doRequest(function (err, result) {
next(err, result);
});
}, function (error, results) {
// do something with your results
}