我有一个单页应用程序,它从节点js服务器获取对象列表。但是,如果用户在加载其余相关对象之前选择列表中的第一项,则需要取消该请求。我可以在客户端取消请求(有角度),但是不知道如何在节点中已经启动的呼叫上取消请求!
下面的代码是我用来调用节点api的方法,能够在客户端取消该请求。
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);
非常感谢任何帮助
罗布