javascript承诺定义&使用

时间:2018-05-18 07:29:31

标签: javascript es6-promise

我真的很难将Javascript承诺集成到我的代码中,并希望对此有所帮助。

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

这是删除功能:

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

但这一切似乎都是错误的,因为我在这里定义了承诺,但实际上我实际上想要使用它,即用.then来处理它的结果。

我遗漏了一些基本的东西,我有这种感觉,我需要改变我正在考虑全部删除功能的方式...... 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果你想使用Promise,你没有将callback传递给这些论点,那就是承诺的目标:在解决/拒绝后调用你想要的任何功能

例如:

使用回调:

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:当拒绝是触发器时执行

我希望它会帮助你!