我认为我以完全错误的方式使用异步函数,需要一些帮助。
我希望我的功能:
扫描对象数组
测试"名称"每个对象对正常函数的值;使用请求发出http请求(即" www.foobar.com /" + array.Name),如果源存在则返回1.
如果这两个条件均为真,则将对象添加到新数组
完全扫描阵列后,将新阵列保存到文件
一切正常;但是,异步调用在写入文件后完成运行!
示例:
function checkName(foo) {
request("www.foobar.com/"+foo, function(error, response, body) {
if (!error && response.statusCode == 200)
return 1;
else
return 0;
});
}
function checkSrc(foo) {
for (var i = 0; i < 10; i++) {
if (!(banlist.test(foo[i].name)) && checkName(foo[i].name)) {
str.push(foo[i]);
}
count++;
}
}
&#13;
这里开始实际执行:我读了源文件,想要填充数据&#39;使用&#39; checkSrc&#39;创建的数组,然后将其保存到文件中。
正如我上面所说,保存文件后请求完成,因此我在最终对象中有一个空数组。
fs.readFile('./data.js', function read(err, data) {
if (!err) {
console.log("Response received!");
var dump = JSON.parse(data);
var len = dump.applist.apps.length;
var str = [];
console.log("Parsing...");
checkSrc(dump.list);
var final = {
"list": str
};
str_final = JSON.stringify(final);
fs.writeFile("parsed.js", str_final, function(err) {
if (err) {
return console.log(err);
}
});
};
});
&#13;
我在stackoverflow中找到了一些类似的问题,但它们都没有发出http请求;我试图将我的循环包装成一个函数,但它也没有用。我尝试过使用请求同步和同步请求节点模块,但似乎已被弃用。