2017-06-06 14 views
2

jQueryの約束のために、引数を持たない$.when()は、約束を返します。拒否されたjQueryの約束を返すものは何ですか?例えば拒否されたjQuery約束を直接返す

: "解決"

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

プリント。関数が返すものだけを変更して、 "失敗"を出力したいと思います。

これは、jQueryの約束で同期のものをブリッジするためのものです。私が考えた唯一のことは、すべてのものを遅延オブジェクトにラップすることです。私が持っているかもしれません。ここで

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

しかし、私はそのようなことをラップする必要はありませんでした場合はそれがより便利になり、直接$.when()ようなものを返すことができます:

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

私の代わりにこれを行うことができます代わりに。

+3

ネイティブの約束のjQueryの実装を使用するために、任意の特定の理由は? –

+0

返信Promise.reject() –

+0

@Bergi Nice find;ありがとう! –

答えて

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>

関連する問題