在 node.js 中使用 q 的空承诺

empty promises using q in node.js

我尝试使用节点 js 实现状态机。为了简化我使用 q 和 promises 的回调。在某些情况下,在特定状态下调用函数什么都不做。但是要在控制流中使用它,我需要一个已解决的承诺。

所以我的状态是这样的。

// onstate.js
module.exports = function(){
  this.switchOn = function(){
    var deferred = Q.defer();
    deferred.resolve();
    return deferred.promise;
  };
  this.switchOff = function(){
    var deferred = Q.defer();
    object.switchOff()
      .then(function(result){
          // changing to off-state
          deferred.resolve();
        },
        function(err){
           deferred.reject(err);
        });
    return deferred.promise;
  };
}

关机功能如Q文档中所述。但是 switchon 函数呢?我想打电话给:

currentState.switchOn().then(foo(), bar());

我真的必须立即创建延迟解析,还是可以使用更简单的代码实现相同的行为?

您可以使用 Q(value) 创建已解决的承诺。在您的具体情况下,只需 Q()

文档:https://github.com/kriskowal/q/wiki/API-Reference#qvalue

I need a resolved promise.

Q function 就是这样做的,在 ES6 中它将是 Promise.resolve(…)

my code looks like this

它大量使用 deferred antipattern!你可以这样做

module.exports = function() {
  this.switchOn = function() {
    return Q(); // passing `undefined`
  };
  this.switchOff = function() {
    return object.switchOff();
  };
};

并且仍然与 currentState.switchOn().then(foo, bar); 一起使用(注意我没有将呼叫传递给 then)。