Node.js nodejs XHR调用在大约50次调用后停止

Node.js nodejs XHR调用在大约50次调用后停止,node.js,xmlhttprequest,deferred,Node.js,Xmlhttprequest,Deferred,我正在使用XHR nodejs模块进行大量ajax调用(现在大约有100个)。我使用deferred异步执行此操作。在请求量在40到50个调用之间传递之前,这种方法非常有效。然后它就停了下来,什么也不做。如果我在同步(这不是一个真正的选项)它确实支持所有的电话,我可以通过它。那么是什么导致了这个问题呢 我的代码如下: function getFile(url) { var def = deferred() ,xhr = new XMLHttpRequest

我正在使用XHR nodejs模块进行大量ajax调用(现在大约有100个)。我使用deferred异步执行此操作。在请求量在40到50个调用之间传递之前,这种方法非常有效。然后它就停了下来,什么也不做。如果我在同步(这不是一个真正的选项)它确实支持所有的电话,我可以通过它。那么是什么导致了这个问题呢

我的代码如下:

    function getFile(url) {
        var def = deferred()
        ,xhr = new XMLHttpRequest(); 

        xhr.open("GET", url); 
        xhr.onreadystatechange = handler;
        //Callback
        function handler (){
            // If status is ready
            if (this.readyState == 4 && this.status >= 200 && this.status < 300 || this.status === 304) {
                try {
                    var result = eval(this.responseText);
                } catch (e) {
                    def.resolve(e);
                }
                def.resolve(result && result[0]);
            } else if (this.status === 401){
                console.log('Error 401')
                def.resolve(new Error('Error:' + this.responseText));
            };
        };
        xhr.send(null);
        return def.promise;
    };
非常感谢

编辑:

正如Brad所建议的,我添加了很多控制台日志

function getFile(url) {
    var def = deferred()
    ,xhr = new XMLHttpRequest(); 
    console.log("url:", url);
        xhr.onreadystatechange = function() {
            console.log("status ready");
            if (this.readyState == 4 && this.status >= 200 && this.status < 300 || this.status === 304) {
                try {
                    var result = eval(this.responseText);
                    console.log('getting files', i++)
                } catch (e) {
                    def.resolve(e);
                }
                console.log("resolving files");
                def.resolve(result && result[0]);
            } else if (this.status === 401){
                console.log('Error 401')
                def.resolve(new Error('Error:' + this.responseText));
            };
            console.log("not ready");
        };
        console.log("out of callback");
    xhr.open("GET", url); 
    xhr.send(null);
    return def.promise;
};
函数getFile(url){
var def=deferred()
,xhr=newXMLHttpRequest();
log(“url:,url”);
xhr.onreadystatechange=函数(){
控制台日志(“状态就绪”);
如果(this.readyState==4&&this.status>=200&&this.status<300 | | this.status==304){
试一试{
var result=eval(this.responseText);
console.log('获取文件',i++)
}捕获(e){
定义.决议(e);
}
console.log(“解析文件”);
定义解析(结果和结果[0]);
}else if(this.status==401){
console.log('Error 401')
解析(新错误('Error:'+this.responseText));
};
控制台日志(“未准备就绪”);
};
console.log(“退出回调”);
xhr.open(“GET”,url);
xhr.send(空);
回报承诺;
};
结果是:

我得到60个“url:”,url日志显示了获取数据所需的所有url。 然后,执行回调

导致:

获取文件3 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件4 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件5 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件6 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件7 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件8 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件9 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件10 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件11 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件12 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件13 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件14 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件15 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件16 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件17 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件18 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件19 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件20 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件21 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件22 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件23 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件24小时 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件25 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件26 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件27 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件28 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件29 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件30 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件31 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件32 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件33 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件34 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件35 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件36 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件37 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件38 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件39 解析文件 还没准备好 状态就绪 还没准备好 状态就绪 还没准备好 状态就绪 获取文件40 解析文件 还没准备好

以“未准备好”结尾

有人能解释一下吗? 请参阅github上的代码:


您的语法没有意义。你能澄清一下这是怎么回事吗

return getFile(url)(function (ajaxResult) {
        return {
            movieTitle:movieTitle,
            filename: file,
            movieScraperInfo: ajaxResult
        };
    });

我知道问题出在哪里了。
我同时做了很多工作,将数据保存在内存中,同时将其传递给其他函数。换言之,我只是没有记忆了。我要重构代码

您多久调用一次
getFile(url)
?你能发电话号码吗?我用
return getFile(url)(function (ajaxResult) {
        return {
            movieTitle:movieTitle,
            filename: file,
            movieScraperInfo: ajaxResult
        };
    });