2015-06-26 35 views
0

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

+0

'for'同步,并且如果您仅在for块内调用阻塞函数,则整个循环也将同步。我真的没有让你问题... –

+0

为什么默认情况下循环不会同步? –

+0

这需要更多信息。 –

回答

4

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

  1. 你会想一个数组来保存所有URL的,你想打
  2. 你要创建一个调用列表中,等待第一个URL的功能响应
  3. 在回调函数这一号召,一旦所有的异步工作完成后,调用相同的功能,直到它出的URL的命中

应该看起来有点像这样重新启动过程:

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()会产生变异原阵列

+0

好的。有可能使用异步来处理这种情况? – SebiSebi

+0

你是什么意思?此解决方案处理使用异步时出现的复杂问题 –

+0

使用异步模块。 – SebiSebi