PromiseとAJAX呼び出しは両方とも非同期操作です。 GET/POST要求は両方で行うことができます。 <<編集:それは間違ったステートメントです
それで、それらの違いは何ですか?そして、いつ他の代わりに一方を使用するのが最善でしょうか?
また、もう1つ:
最近、私はその本体にAJAXがある約束に出会いました。非同期操作を非同期操作の中に入れるのはなぜですか?それは、パンのサンドイッチにパンを入れるようなものです。
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
ここではjQueryが使用されます。 AJAX呼び出しには、Promiseの動作とプロパティがあります。私はそれを早く得ませんでしたが、ここに私の考えがあります:私たちは約束で何かをすることができます。次に、AJAX呼び出しを使用し、done
関数で解決済みのPromiseロジックを渡します。特にこの例では何もありません。
今、私は両方を混同していたことがわかります。それらは、ほぼ2つの異なるものです。非同期だからといって、互換性があるわけではありません。
===============
EDIT 2:有用だとわかったいくつかの資料
約束とAjax呼び出しについて混乱しています。リンゴとナイフのようなものです。ナイフでAppleをカットできます。ナイフはAppleに適用できるツールですが、この2つは非常に異なるものです。
Promiseは、非同期操作を管理するためのツールです。非同期操作が完了するタイミングと結果を追跡し、その完了とそれらの結果(エラー状態を含む)を他のコードまたは他の非同期操作と調整できます。実際には、非同期操作ではありません。 Ajax呼び出しは、従来のコールバックインターフェースで使用したり、Promiseインターフェースにラップしたりできる特定の非同期操作です。
それで、それらの違いは何ですか?そして、いつ他の代わりに一方を使用するのが最善でしょうか?
Ajax呼び出しは、特定の種類の非同期操作です。 XMLHttpRequest
interface を使用して従来のコールバックでAjax呼び出しを行うか、 fetch()
インターフェイス 。
最近、本体にAJAXを含む約束がありました。なぜ非同期操作を非同期操作の中に入れるのですか?それは、パンの塊をパンのサンドイッチに入れるようなものです。
話している特定のコードは表示しませんでしたが、非同期操作1を開始し、その非同期操作が完了したら、非同期操作2を開始することがよくあります(多くの場合、最初の結果を使用します)。その場合、通常、一方を他方の内側にネストします。
ここにあなたのコード例:
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
約束のアンチパターンと見なされます。 $.getJSON()
は既に返せる約束を既に返しているため、ここで新しい約束を作成する理由はありません。代わりにこれを行うことができます:
function threadsGet() {
return $.getJSON('api/threads');
}
または、やや非標準のjQuery Promiseを標準Promiseに「キャスト」したい場合は、これを行うことができます。
function threadsGet() {
return Promise.resolve($.getJSON('api/threads'));
}