Node.js 停止来自客户端节点的多个异步调用
我有一个单页应用程序,可以从NodeJS服务器获取对象列表。但是,如果用户在加载其余相关对象之前选择了列表中的第一项,则需要取消请求。我可以在客户端取消请求,但看不到如何取消已启动的调入节点上的请求 下面的代码是我用来调用节点api的方法,能够在客户端取消该请求Node.js 停止来自客户端节点的多个异步调用,node.js,angularjs,Node.js,Angularjs,我有一个单页应用程序,可以从NodeJS服务器获取对象列表。但是,如果用户在加载其余相关对象之前选择了列表中的第一项,则需要取消请求。我可以在客户端取消请求,但看不到如何取消已启动的调入节点上的请求 下面的代码是我用来调用节点api的方法,能够在客户端取消该请求 getDiscovery : function(ids) { var Ids = [], apiUrl = '/api/Something/ids', self = this,
getDiscovery : function(ids) {
var Ids = [],
apiUrl = '/api/Something/ids',
self = this,
deferredAbort = $q.defer();
// Initiate the AJAX request.
var request = $http({
method: "get",
url: apiUrl,
params: {
ids: JSON.stringify(ids)
},
timeout: deferredAbort.promise
});
var promise = request.then(
function(response) {
return(response.data);
},
function(response) {
return($q.reject( "Something went wrong" ));
}
);
promise.abort = function() {
deferredAbort.resolve();
};
promise.finally(
function() {
console.info( "Cleaning up object references." );
promise.abort = angular.noop;
deferredAbort = request = promise = null;
}
);
return(promise);
}
这是需要取消的节点api上的方法
exports.getItemsDiscovery = function(req, res){
var Items = JSON.parse(req.query.ids);
async.each(Items,
function(Item, callback){
method.getSomething(Item.Id, function(data){
console.log('Got data for', item.Id);
callback();
});
},
function(err) {
return res.send(Items);
});
};
路线是
app.get'/api/ids',something.getItemsDiscovery
任何帮助都将不胜感激
Rob如果您已经解决了在客户端上取消请求的问题,那么为什么不干脆忽略服务器的响应呢?我认为这会降低节点的速度,因为它可能会向第三方发出200多个请求。听起来您在服务器上有一个更根本的优化问题要处理!如果不知道服务器发出这么多请求的原因,就不可能提出补救措施,但我想这是一个完全不同的问题。不,这不是请求的数量,我必须疯狂地调用外部api来构建一个特定的对象,该对象是以后过滤初始结果所需的