2017-06-06 136 views
2

對於jQuery的承諾,不帶參數的$.when()返回已解決的承諾。什麼是返回被拒絕的jQuery承諾的等價物?直接返回拒絕的jQuery承諾

例如:

(function() { return $.when(); })() 
    .then(()=>console.log('resolved')) 
    .fail(()=>console.log('failed')); 

打印 「解決」。我只想更改函數返回的內容,以便打印「失敗」。

這是爲了與jQuery承諾橋接同步的東西。我想要做的唯一事情就是將整個事物包裝在一個延遲對象中,例如在那裏我可能有:

function doSomething() { 
    let success = ...; 
    return success ? $.when() : /* not sure */; 
} 

我能做到這一點,而不是:

function doSomething() { 
    return $.Deferred(function (def) { 
     let success = ...; 
     if (success) 
      def.resolve(); 
     else 
      def.reject(); 
    }).promise(); 
} 

但是,如果我沒有包裹之類的東西,這將是更方便,可以像$.when()直接返回的東西代替。

+3

任何特別原因需要使用jQuery的實現原生的承諾? –

+0

return Promise.reject() –

+0

@Bergi很好找;謝謝! –

回答

1

如果你絕對要使用jQuery的承諾,而不是原生的承諾,你可以使用Deferred.reject

(function() { return $.when($.Deferred().reject()); })() 
 
    .then(()=>console.log('resolved')) 
 
    .fail(()=>console.log('failed'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>