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;
但这对我来说似乎不是一个好的解决方案......
最佳答案
你最好的选择可能是使用 Promise。例如,如果您使用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 终止异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31250176/