防止Promise解决/拒绝回调中的重复工作

时间:2017-07-19 21:37:17

标签: javascript node.js es6-promise

所以我有这个简单的场景,两个处理程序中的代码基本相同:

function runPromise(promise: Promise<any>) {

    ret.count++;

    return promise.then(function () {

      ret.count--;
      ret.count < 1 && ret.cb();

    }, function (err) {

      err && console.error(err.stack || err);

      ret.count--;
      ret.count < 1 && ret.cb();

    });
  }

我可以使用的一个解决方案是这样的:

  function runPromise(promise: Promise<any>) {
    ret.count++;

    let resolve = function(){
       ret.count--;
       ret.count < 1 && ret.cb();
    };

    return promise.then(resolve, function (err) {
      err && console.error(err.stack || err);
      resolve();
    });
  }

但我想知道是否有一种更清洁,更优雅的方式来处理这种情况? 除了记录错误之外,我不需要处理错误。

1 个答案:

答案 0 :(得分:3)

是;你可以使用两个回调:

promise
    .catch(err => err && console.error(err.stack || err))
    .then(...);

catch()调用将返回一个非错误的promise(它返回其回调结果的承诺),因此第二个then()回调将始终运行。

但是,您的整个方法存在缺陷,因为调用者无法知道操作是否失败。