如何在节点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操作,也可以通过同步操作实现相同的输出。