javascript - 如何将嵌套_.each转换为同步方法?首选使用 Promises 或 Async.waterfall

标签 javascript node.js nested waterfall

var version = bible.version.toLowerCase();

fs.readFile('./texts/' + version + '.json', 'utf8', function getVersion(err, text) {
  var canon = JSON.parse(text);
  var writeCanon = '';

  fs.mkdir(bible.export + version + '/');

  _.each(canon, function (b, book) {
    var books = canon[book];
    var writeBooks = '';

    fs.mkdir(bible.export + version + '/' + book + '/');

    writeCanon += '<a alt="' + book + '" href="' + site.root + version + '/' + book + '/" id="' + book + '">' + book + '</a>\r\n';

    _.each(books, function (c, chapter) {
      var chapters = books[chapter];
      var writeChapters = '';

      fs.mkdir(bible.export + version + '/' + book + '/' + chapter + '/');

      writeBooks += '<a alt="' + book + ' ' + chapter + '" href="' + site.root + version + '/' + book + '/' + chapter + '/">' + chapter + '</a>\r\n';

      _.each(chapters, function (v, verse) {
        writeChapters += '<span id="' + verse + '">' + verse.sup() + ' ' + v + '</span>\r\n';

        fs.mkdir(bible.export + version + '/' + book + '/' + chapter + '/' + verse + '/');
        fs.writeFile(bible.export + version + '/' + book + '/' + chapter + '/' + verse + '/index.html', v);
      });

      fs.writeFile(bible.export + version + '/' + book + '/' + chapter + '/index.html', writeChapters);
    });

    fs.writeFile(bible.export + version + '/' + book + '/index.html', writeBooks);
  });

  fs.writeFile(bible.export + version + '/index.html', writeCanon);
});

我一直在处理这段代码,考虑到我只是生成目录和文件,我对嵌套结果非常满意。问题是我需要这些按顺序执行,这样它就不会在目录存在之前尝试创建文件!

我想做的是使用 Promise 来做到这一点,或者如果这是错误的想法,那么也许 async.waterfall ?我不确定如何将 _.each 函数的值推送到下一个而不嵌套它们。任何帮助都会很棒!

最佳答案

Node.js 提供了大多数方法的同步版本。如果您希望所有内容按顺序执行(即不使用异步回调),则可以使用这些方法。

对于fs.mkdirfs.mkdirSync,对于fs.readFilefs.readFileSync

http://nodejs.org/api/fs.html

关于javascript - 如何将嵌套_.each转换为同步方法?首选使用 Promises 或 Async.waterfall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28245752/

相关文章:

c++ - 如何在 C++ 的嵌套类中初始化 2 个成员

Angular 2 - 访问嵌套的 Formarrays (FormBuilder)

ios - 如何从另一个 uitableviewcell 中的 tableview 导航?

javascript - 正则表达式接受至少 6 个字符,至少一个字母和以下至少之一 : 0123456789-. @_

javascript - 为什么这个表单不能用 jquery 验证?

node.js - Electron 关闭按钮不起作用

javascript - Writable Stream清空文件但不写入nodeJS中预期的内容

node.js - 如何在火炮负载测试中通过 csv 文件传递​​ yaml 中的整数

javascript - 使用 javascripts 的浏览器语言

javascript - 在 php 中使用 javascript 模板