簡體   English   中英

藍鳥承諾解決或拒絕無法正常工作

[英]Bluebird promise resolve or reject not working properly

這是一個僅在目錄不存在時才創建目錄的功能。 在這里,我使用fs.mkdirSync函數創建目錄。 通常,如果目錄創建成功,則此函數返回undefined值;如果創建失敗,則返回錯誤消息。 我已經處理了使用if條件的promise解析和拒絕方法。 在我的home目錄中,沒有名為Projectstest目錄。 當我使用dirName/home/srinesh/Projects/test/hello運行該函數時,在這種情況下, createDir生成錯誤。 但是我正在努力解決的問題是,錯誤消息不包含createDir error字符串,該createDir error字符串表明它沒有通過promisereject函數。 最后,我想知道的是如何使用promises處理Sync函數的錯誤。

錯誤信息:

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);
      });
};

fs.mkdirSync始終返回undefined ,如果發生錯誤,它將拋出該錯誤。 您可以將fs.mkdirSync包裝在try-catch並在代碼拋出時reject ,但是更優雅的解決方案是使用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM