异步文件夹创建回调永远不会发生

时间:2018-07-12 10:16:33

标签: node.js es6-promise

我正在按照以下步骤进行一组异步操作

  1. 读取文件
  2. 创建文件夹
  3. 将新文件写入该文件夹。

我已经使用promise编写了我的代码,如下所示。

const readMzFile = (fileName, type) =>
  new Promise((resolve, reject) =>
    fs.readFile(fileName, type, (err, data) => {
      return err ? reject(err) : resolve(data);
    })
  );

const createFolder = folderName =>
  new Promise((resolve, reject) =>
    fs.mkdir(folderName, function(err) {
      return err ? reject(err) : resolve();
    })
  );

const writeMyFile = (filename, type) =>
  new Promise((resolve, reject) =>
    fs.writeFile(filename, type, function(err) {
      return err ? reject(err) : resolve();
    })
  );

我正在按如下方式使用这些Promise函数

readMyFile("xxx", "utf8")
  .then(function(data) {
    var generated = anotherFunc(package_data, data);
    var dir = "/home/malintha/test";
    createFolder(dir).then(function() {
      writeMyFile("xxx", generated_source).then(function() {
        console.log("File saved !!");
        res.end();
      });
    });
  })
  .catch(error => console.log("Error: ", error));

读取文件并创建文件夹时发生,但最后一步-文件写入未完成,并且在创建文件夹后似乎卡住了。

此代码有什么问题?

1 个答案:

答案 0 :(得分:1)

乍看之下,约定的功能看起来并不糟糕(尽管可以研究util.promisify(),所以您无需手动进行操作)。

至少,您没有正确返回承诺,因此可能会隐藏异常。

这样的事情怎么样?

readMyFile("xxx", "utf8")
  .then(function(data) {
    var generated = anotherFunc(package_data, data);
    var dir = "/home/malintha/test";
    return createFolder(dir)
      .then(() => writeMyFile("xxx", generated))
      .then(() => {
        console.log("File saved !!");
        res.end();
      });
  })
  .catch(error => console.log("Error: ", error));