我是node.js的新手,我想知道是否可以同步迭代循环。假设在for循环中我调用了一个阻塞函数(读取,写入),我希望for执行同步(等待第一次迭代完成,然后执行第二次迭代,......)?我看到了一些关于异步模块的教程,但没有人讨论过这个问题。
答案 0 :(得分:5)
你不应该为此使用for循环。 for
循环将同时触发每个异步函数,这显然不是您想要的。您应该创建自己的系统来调用它们。尝试这样的事情:
应该看起来像这样:
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.readFile和fs.writeFile吗?这些是异步方法,您需要在回调中一个接一个地调用。
如果您确实想要使用循环,请查看这些方法fs.readFileSync和fs.writeFileSync的同步版本。