在node.js中使用q实现空承诺
我尝试使用NodeJS实现一个状态机。为了简化回调,我使用q和promises。在某些情况下,对特定状态调用函数没有任何作用。但要在控制流中使用它,我需要一个坚定的承诺 所以我的状态是这样的在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
// 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)
(注意我没有将调用传递给然后)。好的,如果第二部分只是返回另一个承诺,则清除。但是为了简化它//在我的示例中更改为关闭状态甚至是做一些事情的占位符(其他承诺和一些本地事情),所以在现实生活中并不是那么简单。那么它是一个反模式吗?如果是,如何做得更好。是的。当然,在看不到实际代码的情况下,我无法真正说出,但延迟的使用通常是一种反模式。“一些本地材料”也应该返回承诺,您可以使用然后组合它们。