如何在Node.js中调用Urls和console.log响应列表

时间:2018-01-22 07:34:44

标签: javascript node.js promise

嗨,我有一个每小时运行的lambda。它所要做的就是发送一个获取响应到url列表和console.log响应。

如果某些URl调用不成功但我仍然需要记录它们,我如何使用nodejs中的promises执行此操作?

以下是我现在的代码示例

function pingAll() {

    try {
        urls = fs.readFileSync(('./apiURLS/list.txt'), 'utf8').split('\n');
        for(var i = 0; i<urls.length;i++) {

            var url = urls[i];
            http.get(url, function(res) {
                console.log("Got response: " +url + " "+ res.statusCode);
            }).on('error', function(e) {
                console.log("Got error: " + e.message);
            });

        }
    } 
    catch(e) {
        console.log('Error:', e.stack);
    } 
}

感谢您的帮助

2 个答案:

答案 0 :(得分:-1)

尝试将try / catch放入for语句:

function pingAll() {
    try {
        urls = fs.readFileSync(('./apiURLS/list.txt'), 'utf8').split('\n');
        for(var i = 0; i<urls.length;i++) {
            var url = urls[i];
            try {
                http.get(url, function(res) {
                    console.log("Got response: " +url + " "+ res.statusCode);
                }).on('error', function(e) {
                    console.log("Got error: " + e.message);
                });
            }
            catch(e) {
                console.log('Error calling url:', e.stack);
            } 
        }
    } 
    catch(e) {
        console.log('Error:', e.stack);
    } 
}

答案 1 :(得分:-1)

绝不是专家,可能会有更好的解决方案,但我认为你可以通过Promise.all实现这一目标!

喜欢这个

const urls = fs.readFileSync(('./apiURLS/list.txt'), 'utf8').split('\n');

var ping = function ping(url) {
  return new Promise(function(resolve, reject) {
    http.get(url, function(res) {
            console.log("Got response: " +url + " "+ res.statusCode);
            resolve(res);
        }).on('error', function(e) {
            console.error("Got error: " + e.message);
            reject(e.message);
        });
  });
};

var pingAll = urls.map(ping);

var results = Promise.all(pingAll);

results.then(function(data) {
  console.log(data);
}).catch(err => {
  console.error(err);
});