Javascript Nodejs请求循环限制

Javascript Nodejs请求循环限制,javascript,node.js,Javascript,Node.js,这是我的第一个nodejs应用程序。我正在尝试获取一些外部API并计算响应 在卷发列表变大之前,一切正常。 卷发表上有10个项目没问题,但我有一个超过90个项目的大卷发表 执行此实现的最佳方式是什么 谢谢你的帮助 致以最良好的祝愿, 约翰尼 var request=require('request'); 变量列表=[{ id:1, href:'/name1' }, { id:2, href:'/name2' }, { id:3, href:'/name3' }]; var curl=函数(id、

这是我的第一个nodejs应用程序。我正在尝试获取一些外部API并计算响应

在卷发列表变大之前,一切正常。 卷发表上有10个项目没问题,但我有一个超过90个项目的大卷发表

执行此实现的最佳方式是什么

谢谢你的帮助

致以最良好的祝愿, 约翰尼

var request=require('request');
变量列表=[{
id:1,
href:'/name1'
}, {
id:2,
href:'/name2'
}, {
id:3,
href:'/name3'
}];
var curl=函数(id、url){
var有效载荷={
id:id
};
变量选项={
方法:“post”,
机身:有效载荷,
是的,
网址:“
}
请求(选项、功能(错误、恢复、正文){
如果(错误){
log(错误,“发布json时出错”)
返回
}
//计算响应数据
//如果匹配
如果(匹配){
console.log(url);
}
});
};
app.listen(3000,函数(){
对于(var i=0;i
您的
for
循环在几微秒内启动所有已定义的请求-网站通常会检测到诸如试图使服务器过载(攻击)之类的突兀行为。由于您自身的硬件/网络限制,这样做也不是一个好主意-如果您需要发出1000个请求,并且每个响应都有1 MB,那么您突然需要下载1 GB的响应数据。更糟糕的是,您的网络可能会过载,一些请求可能会超时


您需要添加某种限制,以将任何给定时间发出的请求量限制在合理的范围内。我个人推荐这个库,特别是它的实用程序。

修改代码以执行类似操作

var request = require('request');

var curlList = [{
    id: 1,
    href: '/name1'
}, {
    id: 2,
    href: '/name2'
}, {
    id: 3,
    href: '/name3'
}];

var curl = function(id, url, done) {
    var payload = {
        id: id
    };

    var options = {
        method: 'post',
        body: payload,
        json: true,
        url: ""
    }

    request(options, function(err, res, body) {
        done(err);

        if (err) {
            console.log(err, 'error posting json')
            return
        }
        //Calculate response data

        //If match
        if (match) {
            console.log(url);
        }
    });
};

app.listen(3000, function() {
    int current = 1;
    int max = 5; // max 5 parallel
    var scheduleJobs = function() {
        current--;
        while(current < max) {
            current++;
            var job = curList.shift();
            curl(job.id, job.href, scheduleJobs);
        }
    }
    scheduleJobs();
});
var request=require('request');
变量列表=[{
id:1,
href:'/name1'
}, {
id:2,
href:'/name2'
}, {
id:3,
href:'/name3'
}];
var curl=函数(id、url、done){
var有效载荷={
id:id
};
变量选项={
方法:“post”,
机身:有效载荷,
是的,
网址:“
}
请求(选项、功能(错误、恢复、正文){
完成(错误);
如果(错误){
log(错误,“发布json时出错”)
返回
}
//计算响应数据
//如果匹配
如果(匹配){
console.log(url);
}
});
};
app.listen(3000,函数(){
int电流=1;
int max=5;//最大并行数为5
var scheduleJobs=函数(){
当前--;
同时(电流<最大值){
电流++;
var job=curList.shift();
curl(job.id、job.href、scheduleJobs);
}
}
调度作业();
});

这允许最多5个并行请求。

谢谢,我一定会尝试,在您回答之前,我找到了另一个解决方案。但这似乎更好。
var request = require('request');

var curlList = [{
    id: 1,
    href: '/name1'
}, {
    id: 2,
    href: '/name2'
}, {
    id: 3,
    href: '/name3'
}];

var curl = function(id, url, done) {
    var payload = {
        id: id
    };

    var options = {
        method: 'post',
        body: payload,
        json: true,
        url: ""
    }

    request(options, function(err, res, body) {
        done(err);

        if (err) {
            console.log(err, 'error posting json')
            return
        }
        //Calculate response data

        //If match
        if (match) {
            console.log(url);
        }
    });
};

app.listen(3000, function() {
    int current = 1;
    int max = 5; // max 5 parallel
    var scheduleJobs = function() {
        current--;
        while(current < max) {
            current++;
            var job = curList.shift();
            curl(job.id, job.href, scheduleJobs);
        }
    }
    scheduleJobs();
});