Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在node.js中使用q实现空承诺_Node.js_Promise_Q - Fatal编程技术网

在node.js中使用q实现空承诺

在node.js中使用q实现空承诺,node.js,promise,q,Node.js,Promise,Q,我尝试使用NodeJS实现一个状态机。为了简化回调,我使用q和promises。在某些情况下,对特定状态调用函数没有任何作用。但要在控制流中使用它,我需要一个坚定的承诺 所以我的状态是这样的 // onstate.js module.exports = function(){ this.switchOn = function(){ var deferred = Q.defer(); deferred.resolve(); return deferred.promise

我尝试使用NodeJS实现一个状态机。为了简化回调,我使用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 docu中所述。但是开关功能呢?我想打电话:

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

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

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

文件:

我需要一个坚定的承诺

要做到这一点,在ES6中应该是
Promise.resolve(…)

我的代码如下所示

它大量使用了!你可以这么做

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

并且仍然与
currentState.switch()一起使用,然后(foo,bar)
(注意我没有将调用传递给
然后
)。

好的,如果第二部分只是返回另一个承诺,则清除。但是为了简化它//在我的示例中更改为关闭状态甚至是做一些事情的占位符(其他承诺和一些本地事情),所以在现实生活中并不是那么简单。那么它是一个反模式吗?如果是,如何做得更好。是的。当然,在看不到实际代码的情况下,我无法真正说出,但延迟的使用通常是一种反模式。“一些本地材料”也应该返回承诺,您可以使用
然后
组合它们。