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