如何将 Nested _.each 转换为同步方法?首选使用 Promises 或 Async.waterfall
How to convert Nested _.each to synchronous method? Preferred use of Promises or Async.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);
});
我一直在处理这段代码,考虑到我只是生成目录和文件,我对嵌套结果非常满意。问题是我需要这些顺序执行,这样它就不会在目录存在之前尝试创建文件!
我想做的是使用承诺来做到这一点,或者如果这是错误的想法,那么也许 async.waterfall?我不确定如何在不嵌套的情况下将 _.each 函数的值推送到下一个函数。任何帮助都会很棒!
Node.js 提供了大部分方法的同步版本。如果您希望一切按顺序执行(即不使用异步回调),您可以改用这些方法。
对于fs.mkdir
有fs.mkdirSync
,对于fs.readFile
有fs.readFileSync
,等等
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);
});
我一直在处理这段代码,考虑到我只是生成目录和文件,我对嵌套结果非常满意。问题是我需要这些顺序执行,这样它就不会在目录存在之前尝试创建文件!
我想做的是使用承诺来做到这一点,或者如果这是错误的想法,那么也许 async.waterfall?我不确定如何在不嵌套的情况下将 _.each 函数的值推送到下一个函数。任何帮助都会很棒!
Node.js 提供了大部分方法的同步版本。如果您希望一切按顺序执行(即不使用异步回调),您可以改用这些方法。
对于fs.mkdir
有fs.mkdirSync
,对于fs.readFile
有fs.readFileSync
,等等