質問

私はJavaScriptの約束のために研究を行っていました。私は面白かったです私はECMAScriptの約束を他の実装と組み合わせることができました、例えばjQuery $.Deferredです。Promises.allがjQuery $.Deferredでうまく機能すると、驚きました。私はjQueryのソースコードとCommonjsの約束/スペックでの答えを見つけようとしていますが、私は予想どちらのように機能するのか(10秒後にconsole.logを実行します):

var promise = new Promise(function (resolve, reject) {
    setTimeout(function () { 
        resolve();//resolve first promise after 5 secs
        console.log('Promise resolved');
    }, 5000);
});

var deferred = $.Deferred();
setTimeout(function () { 
    deferred.resolve();//resolve after 10 seconds
    console.log('Deferred resolved');
}, 10000);

Promise.all([promise,deferred]).then(function () {
    console.log('All is done');//log after 10 seconds
});
.

あなたはどんなアイデアもありますか?

Promise.allは、理解するために$.Deferredの何か分野や方法に頼る必要があります。その方法/フィールドは何ですか?

役に立ちましたか?

解決

約束a +仕様(約束の包装仕様が、どのネイティブの約束の使用を基準にしていた)がこれを行うために特に構築されていた。

ライブラリの設計目標がまあ、仕様は単一の方法のまわりで構築されています..then

次に、PROMSIONの継続の継続方法を指定します。 jQueryはバージョン1.8以降に.thenを公開します。つまり、このゲームに参加しようとしています。 jQuery遅延と約束は約束/ A +約束ですが、彼らは約束/約束を意味するのを試みます:

return Promise.resolve($.get(...))
.

は常に機能します。 A +の約束(および在来の約束)は、それを返すときに毎回.thenbleを再帰的に同化し、その値で解決されます。

Promise.resolve({then:function(fn){ return fn(3); }}).then(function(el){
    console.log(el); // this logs 3
})
.

仕様をチェックする場合は、次のようにします。

result を呼び出す( nextpromise "then"、( ReforoleMelement PROMISECAPAbility 。[[拒否]] )))。

この

.thenを呼び出して、その.thenableが解決されたときの次の項目を解決する

jQueryの遅延は、標準的な約束の実装を使用しているため、ネイティブの約束を消費することはできません(つまり、あなたは予測可能に$.whenを既存の約束にすることはできません。その他の方法は働きます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top