小编Ban*_*man的帖子

node.js中ForEach中的异步请求

我是node.js(和request.js)的新手.我想从不同的路径特定URL获得一个网站的机身背部(在下面的例子中http://www.example.com/path1,http://www.example.com/path2等. )并使用键/值映射(下面的siteData [path])将此数据记录在对象中.

var request = require('request'),
    paths = ['path1','path2','path3'],
    siteData = {},
    pathLength = paths.length,
    pathIndex = 0;

paths.forEach((path) => {
    var url="http://www.example.com/"+path;
    request(url, function(error, response, html){
        if(!error){
            siteData[path] = response.body;
            pathIndex++;
            if(pathIndex===pathLength){
                someFunction(siteData);
            }
        }
});

function someFunction(data){
    //manipulate data
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • if语句(索引===长度)看起来不像是确定异步请求是否完成的正确方法.我该如何正确检查请求是否完成?
  • 当我执行上面的代码时,我得到一个错误,(node) warning: possible EventEmitter memory leak detected. 11 unpipe listeners added. Use emitter.setMaxListeners() to increase limit.我尝试链接,request(url, function(...){}).setMaxListeners(100);但这不起作用.

谢谢你的帮助!

foreach asynchronous node.js requestjs

1
推荐指数
1
解决办法
5104
查看次数

标签 统计

asynchronous ×1

foreach ×1

node.js ×1

requestjs ×1