Node.js同步循环

时间:2015-06-26 15:55:39

标签: javascript node.js asynchronous

我是node.js的新手,我想知道是否可以同步迭代循环。假设在for循环中我调用了一个阻塞函数(读取,写入),我希望for执行同步(等待第一次迭代完成,然后执行第二次迭代,......)?我看到了一些关于异步模块的教程,但没有人讨论过这个问题。

2 个答案:

答案 0 :(得分:5)

你不应该为此使用for循环。 for循环将同时触发每个异步函数,这显然不是您想要的。您应该创建自己的系统来调用它们。尝试这样的事情:

  1. 您需要一个数组来保存您要点击的所有网址
  2. 您需要创建一个调用列表中第一个URL并等待响应的函数
  3. 在此调用的回调函数中,完成所有异步工作后,调用相同的函数重新启动进程,直到它不在URL中
  4. 应该看起来像这样:

    var urls = new Array("google.com", "youtube.com", "stackoverflow.com");
    
    function callFirstInArray() {
       var url = urls.shift(); //removes the first from the array, and stores in variable 'url'
    
       //do ajax work, and set callback function:
       $.ajax(/*do stuff with the url variable*/, function () { 
          if (urls.length > 0) {   //callback
             callFirstInArray();
          };
       });
    };
    

    您可能无法完全按照我在此描述的方式工作,但它应该使用类似的概念。

    注意:您可能需要额外的函数范围来保护原始的URL数组,因为.shift()会改变原始数组

答案 1 :(得分:0)

您提到您正在阅读和撰写文件,您使用的是fs.readFilefs.writeFile吗?这些是异步方法,您需要在回调中一个接一个地调用。

如果您确实想要使用循环,请查看这些方法fs.readFileSyncfs.writeFileSync的同步版本。