2017-06-20 70 views
1

我的博客中有82个项目,即blogs.I要将整个文件写入文件,以便每个文件都应该有10个博客。因此,我的82个文件中包含9个文件。我写的代码为ffollows如何在节点js中同步执行循环

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.Its异步之前,任何人都可以请建议我help.Thanks。

+0

为了给您提供一个很好的答案,我们需要看看您在循环中要做什么。现在你已经有了,那就是化妆代码,因为你在循环的每次迭代中都没有做任何不同的事情,你正在做的事情影响写这段代码的最佳方式。请为您的问题展示真实的代码,而不仅仅是通用示例代码。 – jfriend00

+0

嗨jfriend..sure我会发布。 –

+0

仍然在等待代码和你实际正在做什么的解释。你从我这里得到的答复机会很快就会到期(睡觉的时间)。最重要的是,您的多个操作可以并行执行,或者必须按顺序执行,以及在完成所有操作时需要的结果类型。 – jfriend00

回答

1

用途:用于

fs.writeFileSync代替fs.writeFile这将在节点JS同步执行你的代码。

注:

正如@ jfriend00曾建议:

如果这是一个服务器的nod​​e.js,你再也不想做同步 I/O除了在服务器启动时,因为它破坏了单线程服务器的可扩展性。相反,当他们这样做

这不是一个好主意,去了同步功能,直到除非它是唯一的方法可以测序异步操作或 监视器。

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

+0

如果这是一个node.js服务器,除非在服务器启动时,否则您不希望执行同步I/O,因为它会破坏单线程服务器的可伸缩性。相反,可以对异步操作进行排序,或者在完成时进行监视(取决于操作系统的要求)。 – jfriend00

+0

@ jfriend00,是的我知道这就是为什么节点js被广泛使用,但有时它的用户需要同步。 –

+0

然而,你提供这个答案时没有任何解释,这个答案什么时候是好的或坏的选择,你也没有做任何努力来弄清楚OP实际上试图做什么,看看这是否是一个好的选择为他们或不。这不是什么在这里得到一个好答案。 – jfriend00