Node.js 停止来自客户端节点的多个异步调用

Node.js 停止来自客户端节点的多个异步调用,node.js,angularjs,Node.js,Angularjs,我有一个单页应用程序,可以从NodeJS服务器获取对象列表。但是,如果用户在加载其余相关对象之前选择了列表中的第一项,则需要取消请求。我可以在客户端取消请求,但看不到如何取消已启动的调入节点上的请求 下面的代码是我用来调用节点api的方法,能够在客户端取消该请求 getDiscovery : function(ids) { var Ids = [], apiUrl = '/api/Something/ids', self = this,

我有一个单页应用程序,可以从NodeJS服务器获取对象列表。但是,如果用户在加载其余相关对象之前选择了列表中的第一项,则需要取消请求。我可以在客户端取消请求,但看不到如何取消已启动的调入节点上的请求

下面的代码是我用来调用节点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

任何帮助都将不胜感激


Rob

如果您已经解决了在客户端上取消请求的问题,那么为什么不干脆忽略服务器的响应呢?我认为这会降低节点的速度,因为它可能会向第三方发出200多个请求。听起来您在服务器上有一个更根本的优化问题要处理!如果不知道服务器发出这么多请求的原因,就不可能提出补救措施,但我想这是一个完全不同的问题。不,这不是请求的数量,我必须疯狂地调用外部api来构建一个特定的对象,该对象是以后过滤初始结果所需的