我正在尝试编写一个函数:
此外,我不需要#2或#3中的错误以任何方式影响我的应用程序中的其余执行 - 即使所有请求或处理都失败,应用程序仍可继续。
我知道如何在循环中触发所有请求,然后在获得所有数据后,使用this insertCollection pattern.
触发回调以处理文件然而,这并不高效,因为在尝试处理之前我不需要等待所有文件下载 - 我希望在每次下载完成时处理它们。
到目前为止,我有这段代码:
const request = require('request');
const urlArray = [urlA, urlB, urlC];
const results = {};
let count = 0;
let processedResult;
const makeRequests = function (urls, callback) {
for (let url of urls) {
request(url, function(error, response, body) {
if (error) {
callback(error);
return;
}
processedResult = callback(null, body)
if (processedResult) {
console.log(processedResult); // prints correctly!
return processedResult;
}
})
}
};
const processResult = function(error, file) {
if (error) {
console.log(error);
results.errors.push(error);
}
const processedFile = file + `<!-- Hello, Dolly! ${count}-->`;
results.processedFiles.push(processedFile);
if (++count === urlArray.length) {
return results;
}
};
const finalResult = makeRequests(urlArray, processResult);
console.log(finalResult); // undefined;
在最后一次调用processResult
时,我设法发送了一个回复,而makeRequests
抓住了它,但在此之后我没有在“finalResult”中“统治”。
我的问题是:
processedResult
在makeRequests
的最后一次迭代中,但不知怎的,我无法返回
它回到来电者(finalResult
)答案 0 :(得分:-1)
makeRequests
函数将undefined返回到finalResult
,因为这是一个同步函数。什么都没有阻止代码执行,所以它到达函数的末尾,因为没有定义的return语句,它返回undefined为默认值。