javascript - nodejs js 队列运行问题
本文介绍了javascript - nodejs js 队列运行问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
var array = [1,2,3,4];
function check()
{
if(array.length > 0)
var url = array.pop();
load(url);
}}
function load(url)
{
http.get(url, function(res){
check();
)
}}
做了个简单的队列 但现在 执行一个 再执行 一个 我想批量执行100个 再执行 100个 怎么控制呢 请问
解决方案
TALK IS CHEAP, SHOW ME THE CODE
Promise version
const array = []
for(let i = 0; i < 109; ++i) array.push(i)
const once = 100
const times = Math.ceil(array.length / once)
const load = async url => ({ url }) // replace here with your load http.get
const init = async () => {
const results = []
for(let n = 0; n < times; ++n) {
const result = await Promise.all(array.slice(n * once, (n + 1) * once).map(url => load(url)))
results.push(result)
}
return results
}
init().then(console.log).catch(console.error)
async version
var async = require('async')
var array = [];
// prepare data
for(var i = 0; i < 109; ++i) { // 模拟总共109个请求,可以任意更改
array.push(i)
}
var once = 100;
var times = Math.ceil(array.length / once);
function parallelRequest(urls, cb) {// urls is an array, contains url
async.parallel(urls.map(url => load(url)), function(err, results) {
if(err) return cb(err)
cb(null, results)
})
}
function load(url) {
return function(callback) {
get(url, function(res) { // replace it using http.get
//.... focus on error and handle it
callback(null, url)
})
}
}
var get = function(url, callback) {
callback(null, {
url: 'url' + url
});
};
// request 100 urls in parallel for each request
async.times(times, function(n, next) {
parallelRequest(array.slice(n * once, (n + 1) * once), function(err, res) {
next(err, res);
});
}, function(err, res) {
// we should now have times=2 array
console.log(res)
});
这篇关于javascript - nodejs js 队列运行问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文