0

jquery によって返される promise は、すべてのエラーを最後に 1 か所で処理するための準備を提供しますか? このようなもの:

ここに画像の説明を入力

$.deferredもしそうなら、おそらく rawを使用.doneしたコードをいただければ幸いです。.fail

試したドキュメント: http://api.jquery.com/deferred.fail/

4

2 に答える 2

2
var jqXHR1 = $.get('/echo/json/'),
    jqXHR2 = $.get('/echo/json/');

$.when(jqXHR1, jqXHR2).then(function(data1, data2){

    //success, do stuff with the data objects

}, function(jqXHR, textStatus, errorThrown) { 

    //error in at least one of the requets:
    console.log(jqXHR, textStatus, errorThrown);

});

無効な URL に切り替えて、エラー コールバックが発生するようにしてください。

http://jsfiddle.net/VHjzM/

于 2013-06-05T11:21:20.183 に答える
1

注:答えはjQuery 1.8+を想定しています。jQuery 1.8 より前では、jQuery の promise/deferred 実装はこのようには機能しませんでした。

.done()/.fail()と関数には微妙な違いがあり.then()ます - 1.8 の時点では、.then()の主な使用法は filter を適用することですが /.done().fail()単にコールバックを適用することです。違いは、同じプロミス.done().fail()返すことです (したがって、呼び出す.done().done().done()と、最初のプロミスにコールバックが追加されるだけです)、.then()フィルターから返された値に対して新しいプロミスが返されます (そのため.then(success)、成功が返す値で解決される新しいプロミスが返されます)。 )。

この違いのデモは、http: //jsfiddle.net/BGSacho/HsMSv/4/にあります。

したがって、そのイメージと同じ機能を複製するには、次のものが必要です。

Deferred.then(success_a)
        .then(success_b)
        .then(success_c, failure);

悲しいことに、jQuery のドキュメントはこの件に関して少し大雑把ですが、 http://api.jquery.com/deferred.then/で見ることができます。

指定されたプロミスのいずれかが拒否されたときに拒否される新しいプロミスを返し、それらすべてからの結合されたデータで正常に解決される$.when()ため、受け入れられた回答で as を使用することも機能します。

于 2013-06-05T11:41:36.250 に答える