如何在创建新ES请求之前取消它

时间:2016-03-18 09:21:42

标签: node.js elasticsearch

我正在使用带有https://www.npmjs.com/package/elasticsearch

的NodeJS

用例如下:当在页面上单击链接时,我将向NodeJS服务器发出请求,然后NodeJS服务器将使用ES节点包从ES Server获取数据并将数据发送回客户端

问题是,当在快速会话中发出两个请求(在短时间内点击两个链接)时,第一个请求的响应然后第二个请求的响应到达客户端。 UI取决于此响应,我想直接显示第二个请求的响应。

所以,问题是,有没有办法在开始新服务器之前取消之前向ES服务器发出的请求?

代码: ES客户:

var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
    host: 'HostName',
    log: 'trace'
});

路线: app.get('/data/:reportName', dataController.getReportData);

DataController类:

function getReportData(req, res) {
    query = getQueryForReport(report)
    client.search(query)
        .then(function(response) {
            res.json(parseResponse(response)
     })
}

因此,使用不同的reportNames连续两次调用相同的API /data/reportName。我想只发送第二个报告数据并取消我们的第一个请求。

1 个答案:

答案 0 :(得分:0)

如果您只关心用户体验,而不是强调您的ES,而不是aborting ajax请求就是您想要的。

由于您没有发布客户端代码,我将为您提供一个通用示例:

var xhr = $.ajax({
    type: "GET",
    url: "searching_route",
    data: "name=John&location=Boston",
    success: function(msg){
       alert( "Data Saved: " + msg );
    }
});

//kill the request
xhr.abort()

请记住,中止请求可能无法阻止elasticsearch查询被处理,但会阻止客户端接收数据。