首页 > 解决方案 > javascript 承诺定义和使用

问题描述

我真的很努力将 Javascript 承诺集成到我的代码中,并希望能在这方面提供一些帮助。

我有这个简单的函数,它是处理创建、读取、更新和删除文件的程序的一部分,所以我决定将它从使用回调更改为使用 Promise。

这是删除功能:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
    if (!err) {
      callback(false);
    } else {
      callback(' Error deleting file');
    }
  });
};

我打算这样做的方式是将异步部分包含在一个承诺中:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  return new Promise((resolve, reject) => {
    fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
      if (!err) {
        resolve(false);
      } else {
        reject(err);
      }
    });
  });
});

但这一切似乎都是错误的,因为我在这里定义了 Promise,但这里实际上是我真正想要使用它的地方,即用.then.

我在这里缺少一些基本的东西,我有这种感觉,我需要改变我对所有删除功能的思考方式......任何帮助将不胜感激。

标签: javascriptes6-promise

解决方案


如果你想使用Promise你没有将 a 传递给callback这些参数,这是 promise 的目标:在解析/拒绝之后调用你想要的任何函数。

例如 :

带回调:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
    if (!err) {
      callback(false);
    } else {
      callback(' Error deleting file');
    }
  });
};

lib.delete('./dir', 'filname.txt', function(res){
  console.log(res);
})

带着承诺

lib.delete = (dir, file) => {
  return new Promise((resolve, reject) => {
    fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
      if (!err) {
        resolve(false);
      } else {
        reject(err);
      }
    });
  });
});

lib.delete('./dir', 'filname.txt')
  .then( () =>  console.log("No error i'm happy")
  .catch( (err) =>  console.log('Error', err)

then: 解析触发时执行

catch: 当拒绝被触发时执行

我希望它会帮助你!


推荐阅读