ECMAScript Promise.AllメソッドはjQuery.Deferredと連携します。どうして?
-
22-12-2019 - |
質問
私は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 +の約束(および在来の約束)は、それを返すときに毎回.then
bleを再帰的に同化し、その値で解決されます。
Promise.resolve({then:function(fn){ return fn(3); }}).then(function(el){
console.log(el); // this logs 3
})
.
仕様をチェックする場合は、次のようにします。
result を呼び出す( nextpromise 、
"then"
、( ReforoleMelement 、 PROMISECAPAbility 。[[拒否]] )))。
(この)
所属していません StackOverflow