我尝试使用节点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());
我是否真的必须立即创建延迟解析,或者使用更简单的代码可以实现相同的行为?
答案 0 :(得分:2)
您可以使用Q(value)
创建已解决的承诺。在您的具体情况下,只需Q()
。
答案 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
)。