第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

jQuery.when-何時不再延遲所有“未解決”(已解決或被拒絕)的回調(diào)?

jQuery.when-何時不再延遲所有“未解決”(已解決或被拒絕)的回調(diào)?

慕哥9229398 2019-10-18 13:47:54
當(dāng)多個Deferred對象傳遞給jQuery.when時,該方法從新的“主” Deferred對象返回Promise,該對象跟蹤已傳遞的所有Deferred的聚合狀態(tài)。該方法將所有“遞延者”解決后,立即解析其主遞延者;或只要其中一個“延期者”被拒絕,就拒絕其主“延期者”。如果主Deferred已解析(即,所有Deferreds解析),則將傳遞給jQuery.when的所有Deferred的解析值傳遞給它。例如,當(dāng)Deferreds是jQuery.ajax()請求時,參數(shù)將是請求的jqXHR對象,按照在參數(shù)列表中給出的順序:$.when( $.getJSON('foo'), $.getJSON('bar') ).done(function(foo, bar) {    // foo & bar are jqXHR objects for the requests});在多個Deferred的情況下,其中一個Deferred被拒絕,當(dāng)立即解散其主Deferred的失敗回調(diào)時,jQuery。即使此時某些Deferred仍未解決:$.when( $.getJSON('foo'), $.getJSON('bar') ).fail(function(req) {    // req is the jqXHR object for one of the failed requests});當(dāng)所有傳遞給jQuery的Deferred不再“未解決”(即全部“已解決”或“已拒絕”)時,我需要觸發(fā)回調(diào)。我可以發(fā)送具有200個OK代碼的JSON對象(而不是發(fā)送帶有404 Not Found錯誤狀態(tài)代碼的JSON),并在done()方法中確定成功/錯誤,但是我更喜歡保持API RESTful。我該怎么做?
查看完整描述

3 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗 獲得超5個贊

我認(rèn)為最簡單的方法是Deferred為每個AJAX請求保留一個輔助對象,并確保始終解決該問題:


var d1 = $.Deferred();

var d2 = $.Deferred();


var j1 = $.getJSON(...).complete(d1.resolve);

var j2 = $.getJSON(...).complete(d2.resolve);


$.when(j1, j2).done( only fires if j1 AND j2 are resolved );


$.when(d1, d2).done(function() {

     // will fire when j1 AND j2 are both resolved OR rejected

     // check j1.isResolved() and j2.isResolved() to find which failed

});

這是利用.complete()jQuery添加到AJAX 方法的Promise中的附加AJAX方法,該方法被同時用于已解決和已拒絕的Promise。


注意:d1.resolve本身可作為回調(diào),它不需要包裝在一個function() { ... }塊中。


查看完整回答
反對 回復(fù) 2019-10-18
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗 獲得超3個贊

它幫助我消除了我創(chuàng)建的黑客程序,其中我在某種程度上人為地解決了諾言(無論潛在結(jié)果如何),以便我可以使用“何時”批處理多個請求并使用“完成”不管他們成功/失敗都繼續(xù)前進(jìn)。


我正在“回答” Alnitak的答案,希望為他的建議提供另一種用途,該建議支持任意數(shù)量的潛在承諾。


var asyncFunc, entity, entities, $deferred, $deferreds;

// ...

foreach (entity in entities) {

    $deferred = $.Deferred();

    $deferreds.push($deferred);

    asyncFunc(entity).done(...).fail(...).always($deferred.resolve);

}

// ...

$.when.apply($, $deferreds).done(...)

這是偽JavaScript,但是應(yīng)該傳達(dá)這種方法。對于某些任意大小的實體集,為每個實體創(chuàng)建一個遞延($ deferred)并將其推送到一個數(shù)組($ deferreds),進(jìn)行異步調(diào)用,根據(jù)需要添加完成/失敗,但始終包含一個“始終”來解決此問題實體的延期付款。注意,“始終”接收延遲的解析功能而不是其調(diào)用。


'when'將$ deferreds數(shù)組轉(zhuǎn)換為'when'的參數(shù)列表,并且由于保證了這組deferreds的解析(感謝all),現(xiàn)在可以定義一個'done',它將被一次調(diào)用不管這些調(diào)用成功與否,異步調(diào)用都將完成。


查看完整回答
反對 回復(fù) 2019-10-18
  • 3 回答
  • 0 關(guān)注
  • 572 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號