我理解为什么会收到此错误,但我不知道如何解决此问题。这是我的第一个函数:
我所做的就是对存储在数据库中的所有网址进行get请求,然后对于每个网址响应,我通过调用=format(CDate(left("20160131",4) & "/" & mid("20160131",5,2) & "/" & right("20160131",2)),"MM/dd/yyyy")
或{来查看正文并保存值信息{1}}
saveInformation(value)
我的异步瀑布看起来像这样:
saveInfoTwo(value)
function getUrlInfo(urls, callback) {
urls.map(function(url) {
request.get(urls, {
timeout: 1500
}, function(error, response, body) {
if (error) {console.log(error);
} else {
parseString(body, function(error, result) {
if (error) {console.log(error);
} else {
result.Values.forEach(function(listValues) {
listValues.forEach(function(value) {
saveInformation(value);
});
saveInfoTwo(value);
});
}
});
}
callback(null);
});
});
}
只是一种查找所有网址并将其添加到async.waterfall([
getUrls,
getUrlInfo
], function(err, result) {
mongoose.connection.close();
});
数组的方法,以便getUrls
可以使用它。
urls
我使用mongodb作为我的数据库。
只有一个网址时效果很好。一旦我添加了另一个网址,我就会收到此错误:
getUrlInfo
现在,在尝试调试之后,似乎所有内容都适用于第一个url,然后当第二个url完成其foreach循环时,会抛出错误。
我该如何解决这个问题?
我很确定我的function getUrls(callback) {
var urls = [];
urlSchema.find(function(error, data) {
data.forEach(function(result) {
clusters.push(result.url);
});
callback(null, urls);
});
}
中的回调等待所有的urls和foreach循环完成,然后继续? - 我猜不是这种情况。
任何帮助将不胜感激!
总结:如何在我添加其他网址时阻止出现错误?
答案 0 :(得分:0)
您的地图调用第一个URL的函数,完成后调用callback
。当第二个执行完成后,它会再次调用callback
,因此您会遇到此错误。
解决方案,等待所有网址完成,然后调用回调。
正如@Bergi在评论中所说,你可以使用async map
function getUrlInfo(urls, callback) {
async.map(urls, function(url, cb) {
//do what you must
cb();
}, callback);
}