【问题标题】:Bluebird promise resolve or reject not working properly蓝鸟承诺解决或拒绝无法正常工作
【发布时间】:2016-04-23 04:28:10
【问题描述】:

这是一个仅当目录不存在时才创建目录的函数。这里我使用fs.mkdirSync 函数来创建目录。通常,如果目录创建成功,此函数返回值undefined,如果创建失败,则返回错误消息。 我使用if 条件处理了promise resolve 和reject 方法。在我的home 目录中,没有名为Projectstest 的目录。当我使用dirName/home/srinesh/Projects/test/hello 运行函数时,在这种情况下createDir 会产生错误。但我正在努力解决的问题是,错误消息不包含createDir error 字符串,这表明它没有通过promisereject 函数。最后,我想知道的是如何处理Syncfunction 与promises 的错误。

错误信息:

Unhandled rejection Error: ENOENT: no such file or directory, mkdir '/home/dazz/Projects/test/hello'

代码:

var filePath = '/home/srinesh/Projects/test/hello';
var createDir = function (dirName) {
  return new promise(function (resolve, reject) {
    var result = fs.mkdirSync(dirName);
    if(result == undefined){resolve('folder created successfully!');}
    else {reject('createDir error: '+result);}
  })
};

var createProject = function (filePath) {
        var result = createDir(filePath);
        console.log(result);
      })
      .catch(function (error) {
        console.log(error);
      });
};

【问题讨论】:

  • 您的 createProject 是语法错误 - 中间有一个杂散的 }),而您调用 .catch() 什么都没有。它实际上是什么样子的?

标签: javascript node.js promise


【解决方案1】:

fs.mkdirSync 总是返回undefined,如果出现错误,它只会抛出。您可以在代码抛出时将fs.mkdirSync 包装在try-catchreject 中,但更优雅的解决方案是使用函数fs.mkdir 的异步版本,如下所示。

var fs = require('fs');

var filePath =  __dirname + '/dummyFolder';
var createDir = function (dirName) {
  return new Promise(function (resolve, reject) {
    var result = fs.mkdir(dirName, (err, folder) => {
        if (err) {
            reject(err);
        } else {
            resolve("folder created successfully");
        }
    });
  })
};

var createProject = function (filePath) {
    createDir(filePath)
        .then(function(val) {
            console.log(val);
        })
        .catch(function(error) {
            console.log(error);
        });
};


createProject(filePath);

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 2015-04-13
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2015-06-26
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多