我应该为 mkdir 使用 promise

Should I use promise for mkdir

我用的是蓝鸟魔法

var fs = Promise.promisifyAll(require('fs'));

并使用

fs.readdirAsync(dest).then(function (val) {
        return val;
}).then(function (file) {

...

我的问题是关于以下代码(正在运行)我是否应该使用相同的代码以及如何使用 我说的是 mkdir 函数。

function createDir(folder) {
    return function (req, res, next) {
        if (typeof require.cache.per === 'undefined') {
            require.cache.per = {};
            require.cache.per.mk = false;
        }
        if (!require.cache.per.mk) {
            fs.mkdir(folder, function (e) {
                if (!!e && e.code !== 'EEXIST') {
                    console.log('Error to create  folder: ' + err);
                }
                require.cache.per.mk = true;
                next();
            });
        } else {
            next();
        }
    };
}

我的问题是我是否应该在这里使用 promise,推荐什么? 代码按预期工作...

Promise.promisifyAll(fs);

return fs.mkdirAsync(dir1)
  .then(function() {
    return fs.mkdirAsync(dir2);
  })
  .then(function() {
    return fs.mkdirAsync(dir3);
  })

希望对您有所帮助。

我肯定会更新您的代码以保持一致。如果可能,请调用 mkdirAsync 而不是 mkdir

示例(来自 OP 的代码):

var fs = Promise.promisifyAll(require('fs'));

// ...

fs.mkdirAsync(folder)
   .catch({ code: 'EEXIST' }, function(e){
       // don't care about this error code  
   })
   .catch(function(e) {
       console.log('Error to create  folder: ' + e);
   })
   .then(function(){
       require.cache.per.mk = true;
       next();
   });

Promise 简化并统一了界面。 .promisify().promisifyAll() 都可以。

然后你可以像这样链接所有东西:

fs.mkdir(dir)
    .then(function success(dir) {
        ...
    })
    .catch(function failure(err) {
        ...
    })
    .finally(function () {
    });

但是在 node.js 中,最重要的是不要阻止 I/O。使用 Promise 还是常规 async/callback 并不重要,只要它不阻塞主线程即可。

在脚本中包含您想要 运行 在 shell 中的同步代码是可以的,但对于常规应用程序,您永远不应故意使用阻塞 I/O 操作。