【发布时间】:2013-05-04 22:49:27
【问题描述】:
我一直在使用 Q 模块来实现我正在从事的项目的承诺。 我正在使用静态方法 Q.fncall() 从 node.js 样式函数中创建一个 Promise(基于返回 err、result 的回调)。
问题是我需要在一定时间后停止执行该函数,所以我使用了Q模块的函数“超时”。因此,在 x 时间后,完成函数上的“错误”回调执行,让我处理超时,但即使处理程序不再监听,函数本身也会继续执行,直到达到最终回调。
问题是:有没有办法在执行超时后停止函数的执行?我知道我可以在超时处理程序上设置一个变量,并在超时结束时继续检查函数,但我希望有一种更简洁的方法来实现这一点。
代码如下:
Q.nfcall(test1, id)
.timeout(1000)
.done(
function (value) {
console.log("SUCCESS: " + value);
},
function (reason) {
console.log("ERROR " + reason);
},
function (progress) {
console.log("PROGRESS " + progress);
}
);
还有test1函数:
function test1(id,callback){
db_rw_pool.query("SELECT * FROM table WHERE id=?",[id], function(err,result) {
if(err){
callback(err,null);
}
else {
setTimeout(function(){
console.log("I DON'T WANT YOU TO BRE PRINTED")
callback(null,result);
},2000);
}
return;
});
}
在我的理想情况下,setTimeout(...,2000) 中的代码永远不应该被执行。这可能吗?
提前致谢。
【问题讨论】:
标签: node.js callback promise q