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

时间:2015-04-10 08:41:32

标签: node.js promise q

我尝试使用节点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());

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

  

我需要一个已经解决的承诺。

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

  

我的代码看起来像这样

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

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

仍然使用currentState.switchOn().then(foo, bar);(注意我没有将来电转移到then)。