我应该使用mkdir的承诺吗?

8 javascript promise bluebird

我使用蓝鸟魔法

var fs = Promise.promisifyAll(require('fs'));
Run Code Online (Sandbox Code Playgroud)

并使用

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

...
Run Code Online (Sandbox Code Playgroud)

我的问题是以下代码(工作正常)我是否应该使用相同的以及我如何谈论该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();
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

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

op1*_*kun 6

Promise简化并统一了界面.无论是.promisify().promisifyAll()将要做的伎俩.

然后你可以链接这样的一切:

fs.mkdir(dir)
    .then(function success(dir) {
        ...
    })
    .catch(function failure(err) {
        ...
    })
    .finally(function () {
    });
Run Code Online (Sandbox Code Playgroud)

但是node.js,最重要的是不要阻止I/O. 无论你是使用Promise还是常规的异步/回调都没关系,只要它不阻塞主线程.

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

  • 我完全同意,恕我直言,承诺为代码提供更好的可读性和可维护性,这在团队协作中很重要 (2认同)