嗨,我有一个每小时运行的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);
}
}
感谢您的帮助
答案 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);
});