Node.js中有什么方法可以杀死异步操作并阻止其完成(调用回调或解决Promise)?
更具体地说,假设我进行了http.get()
调用。这是一个异步操作,最终将调用传递的回调,或引发错误事件。但是它花费的时间太长了,我的代码中的逻辑可能会说:“嘿,我已经等了很久了,我不想再等了!”然后做其他事情。问题是,回调将最终被调用,这可能会弄乱东西!是的,有没有办法阻止该回调被执行?我的想法是:
var notWaitingAnyMore = false;
http.get({}, function(res) {
if(notWaitingAnyMore) { // do stuff! }
});
//do some other stuff
//now fed up with waiting:
notWaitingAnyMore = true;
但这对我来说似乎不是一个很好的解决方案...
最佳答案
您最好的选择可能是使用诺言。例如,如果您使用的是bluebird
,则很容易解决此问题:
new Promise(function(resolve, reject) {
http.get({}, resolve);
}).timeout(500) // timeout length in ms
.then(function(res) {
// do stuff!
}).catch(Promise.TimeoutError, function(err) {
// do you need to do something after it times out?
})
//do some other stuff
关于node.js - Node.js杀死异步调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31250176/