Node.js 终止异步调用

标签 node.js asynchronous

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/

相关文章:

node.js - Jade mixin 应该返回要附加到元素的类

javascript - 通过 API 中的 req.query 将元数据信息附加到 Gridfs 文档文件 - Node.js Expresss.js MongoDB Multer Gridfs 流

javascript - 离线移动为 2factor 身份验证生成 6 位代码

java - 使用 RXJava 执行异步任务的推荐方法

Java EE 请求范围和异步

JavaScript 延迟函数

node.js - 在aws lambda中获取请求参数

c# - 处理异步和同步代码之间的界限?

python - gevent.http.HTTPServer API 建议流式传输,而是缓冲整个请求和响应

node.js - EJS模板: Using forEach + include