如何在elasticsearch中同步多个调用?

时间:2015-10-28 06:44:44

标签: ajax elasticsearch

我在“for”循环中创建对elasticsearch服务器的ajax调用。我面临的问题是,响应没有按正确的顺序排列(即按照循环使用客户端生成的顺序)。如何使呼叫和响应同步?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

$(document).ready(function(){

    function extendFuncChain(url, callback) {
        func_chain_list.push(function() {
            $.ajax({
                url : url,
                type: 'GET',
                contentType:"application/json"
            }).done(function(data) {
                console.debug(data);
                callback();
            });
        });
    }

    var func_chain_list = [function() {}];

    for(var i=1; i<=4; i++) {
        var url = "http://localhost:9200/test_index/doc/" + i;
        var callback = func_chain_list.pop();
        extendFuncChain(url, callback);
    }

    func_chain_list.pop()();
});

为了测试它,我设置了一个包含4个文档的简单索引:

DELETE /test_index

PUT /test_index

POST /test_index/doc/_bulk
{"index":{"_id":1}}
{"name": "doc1"}
{"index":{"_id":2}}
{"name": "doc2"}
{"index":{"_id":3}}
{"name": "doc3"}
{"index":{"_id":4}}
{"name": "doc4"}

然后,当我将javascript放入网页并加载它时,我在控制台中获得此输出(我扩展了最后一个):

enter image description here

希望你能看到如何概括这一点来做你需要的事情。对extendFuncChain的调用非常重要,因为关闭在JS中的工作方式,如果你把它拿出来它就不会工作。