【问题标题】:Get a JQuery promise using Algolia Instantsearch.js library使用 Algolia Instantsearch.js 库获得 JQuery 承诺
【发布时间】:2016-08-10 12:10:30
【问题描述】:

我正在使用 Instantsearch.js 库来管理来自 Algolia API 的结果。

我想知道是否有办法通过 Instantsearch.js 获得承诺?

我目前正在使用命令:

search.on('render', function() {
    // code
});

执行我的代码,但我想在处理我的代码之前等待其他 ajax 异步结果。

我的目的是获得如下内容:

var request1 = $.ajax( url );

var request2 = $.ajax( url );

var result = search.on('render', function() {
    // code
}

$.when(request1, request2, result).then(
    function(){
        console.log("success", arguments);
    },
    function(){
        console.log("fail", arguments);
    });

有人有解决办法吗?

非常感谢。

山姆

【问题讨论】:

  • 事件函数是要被多次调用的,会有几个值。另一方面,承诺代表最终的单一价值。我认为这里存在根本的不匹配,不是吗?

标签: jquery ajax promise jquery-deferred algolia


【解决方案1】:

您可以在render 事件处理程序处创建延迟对象、解析或拒绝延迟对象

var request1 = $.ajax( url );

var request2 = $.ajax( url );

var result = new $.Deferred();

search.on('render', function() {
    // code
    result.resolve(/* value */);
})

$.when(request1, request2, result)
.then(
    function() {
        console.log("success", arguments);
    },
    function() {
        console.log("fail", arguments);
});

【讨论】:

    【解决方案2】:

    承诺“渲染”事件的最简单方法是:

    var request1 = $.ajax(url);
    var request2 = $.ajax(url);
    var rendered = $.Deferred(function(dfrd) {
        search.on('render', dfrd.resolve);
    });
    
    $.when(request1, request2, rendered).then(function(result1, result2) {
        console.log(result1, result2);
    }, function(error) {
        console.error(error);
    });
    

    虽然在这里没什么大不了的,但延迟/承诺在性能方面相当昂贵。使用 :

    var request1 = $.ajax(url);
    var request2 = $.ajax(url);
    search.on('render', function() {
        $.when(request1, request2).then(function(result1, result2) {
            console.log(result1, result2);
        }, function(error) {
            console.error(error);
        });
    });
    

    【讨论】:

    • 你不能解决两次承诺,所以这在使用事件时不起作用。也许你可以使用once 而不是on
    • @bobylito,'render' 事件只会触发一次,所以.on().once() 将具有相同的效果。
    • 没错!我首先误读了事件的名称:(
    猜你喜欢
    • 2017-01-03
    • 2017-11-29
    • 2018-04-04
    • 2016-08-07
    • 2022-01-03
    • 2017-12-27
    • 2018-02-10
    • 2016-05-27
    • 2019-08-20
    相关资源
    最近更新 更多