如何在节点js中同步执行循环

我有82个项目在我的集合,即博客。我想把整个写入文件,使每个文件应该有10个博客。所以我的82我得到9个文件。我写的代码为ffollows

blogList.forEach(function(i,v){ async.waterfall([ function (done) { if ((v !== 0) && (v%10 === 0)){ var appendData = blogList.splice(0,10); if(v === 10) { pageNum = 1; } else { pageNum = v.toString()[0]; } done('',appendData); } },function (testData,done) { try { var testingData = testData.toString(); testData.forEach(function(k,l){ fs.readFile(tagFileReferance, function read(err, referanceData) { if (err) { helper.logs('prepareAmpBlogList','blog',err,'console'); throw err; } tagFileData = referanceData.toString(); var text = k.text; text = text.replace('style','class'); modData = tagFileData.replace('_CLASS_',k.class).replace('_IMAGE_',k.image).replace('_TITLE_',k.title).replace('_DATE_',k.date).replace('_AUTHOR_',k.author).replace('_TEXT_',k.metaText).replace('_BLOG_ID_',k.blog_id); replacedTagsData.push(modData); }); setTimeout(function () { var newData = testList.toString(); var pageNum = v.toString()[0], fileName = 'public/amp/test2/amp-blog-list-'+pageNum+'.html'; fs.writeFile(fileName, newData, function(err) { if(err) { return console.log(err); } console.log("The file was saved!"); }); }, 500) }); } catch(e) { console.log(e) } }],function (err) { helper.logs('prepareAmpBlogList','blog',err,'console'); throw err; }); }) 

但只有第一个文件被写入迭代完成之前的文件write.Itsasynchronous,任何人都可以请build议我help.Thanks。

使用 :

fs.writeFileSync而不是fs.writeFile这将在节点js中同步执行你的代码。

注意 :

正如@ jfriend00所build议的:

如果这是一个node.js服务器,除非在服务器启动时,否则不需要执行同步I / O,因为它破坏了单线程服务器的可伸缩性。 相反,可以对asynchronous操作进行sorting,或者在完成时进行监视

除非是唯一的方法,否则去同步函数并不是一个好主意。

总是findasynchronous操作,也可以通过同步操作实现相同的输出。