2016-08-10 4 views
0

Algolia APIから私の結果を管理するためにinstantsearch.jsライブラリを使用しています。Algolia Instantsearch.jsライブラリを使用してJQuery約束を取得

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); 
    }); 

は、誰もが解決策を持っていますか?

ありがとうございます。

サム

+0

イベント関数は何度も呼び出されることを意味し、いくつかの値があります。一方、約束は最終的な単一価値を表す。私は基本的な不一致がここにあると思います、いいえ? – bobylito

答えて

0

最も簡単な方法があるrenderイベントハンドラで繰延オブジェクトを、繰延オブジェクトを作成して解決するか、拒否することができます。

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); 
    }); 
}); 
+0

約束を2度解決することはできませんので、イベントを使用する場合はこれが機能しません。たぶん、あなたは 'on'の代わりに' once'を使うことができます。 – bobylito

+0

@bobylitoの場合、 'render'イベントは一度だけ実行されるので、 '.on()'と '.once()'は同じ効果を持ちます。 –

+0

これは間違いない!私は最初の場所でイベントの名前を誤解しました:( – bobylito

1

あなたは "レンダリング" イベントをpromisifyする

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); 
}); 
関連する問題