Node.js,使用异步函数return作为条件

时间:2015-10-13 14:14:37

标签: javascript node.js asynchronous

我认为我以完全错误的方式使用异步函数,需要一些帮助。

我希望我的功能:

  • 扫描对象数组

  • 测试"名称"每个对象对正常函数的值;使用请求发出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;
&#13;
&#13;

这里开始实际执行:我读了源文件,想要填充数据&#39;使用&#39; checkSrc&#39;创建的数组,然后将其保存到文件中。

正如我上面所说,保存文件后请求完成,因此我在最终对象中有一个空数组。

&#13;
&#13;
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;
&#13;
&#13;

我在stackoverflow中找到了一些类似的问题,但它们都没有发出http请求;我试图将我的循环包装成一个函数,但它也没有用。我尝试过使用请求同步和同步请求节点模块,但似乎已被弃用。

0 个答案:

没有答案