15

リゾルバの resolve() と フルフィル() の呼び出しの違いがまだよくわかりません。関数と、「約束を解決する」および「約束を果たす」という用語の両方がよく使われています。

それぞれをいつ使用する必要がありますか?

4

2 に答える 2

15

一般に、解決とは、成功または失敗のいずれかを意味します。thenそれが、アクションの呼び出しをトリガーするものです。これは、特定の promise に対して 1 回だけ発生する可能性があります。

フルフィルメントは、うまく「解決」することを意味します。thenこれにより、アクションで成功のコールバックがトリガーされます。失敗の「履行」に相当するものはrejectです。

別の観点から、特定の時点でのプロミスのステータスを「未解決」(保留中と呼ばれることもあります)または「解決済み」に分類できます。「解決済み」には「履行済み」と「拒否済み」のサブステータスがあります。 "。「履行済み」ステータスのプロミスにはがあり、「拒否」ステータスのプロミスには理由があります。

これらの概念を表すために使用される各 API の特定のメソッドは異なります。残念ながら、これらの用語を混同しているブログ投稿やドキュメントが数多くあります。特に、「解決」を意味するときに「フルフィル」を使用したり、その逆を行ったりしています。

Q

私は Q をよく知りませんが、そのresolve方法は実際に約束を果たしているようです (強調を追加)。

promise 以外の値で resolve を呼び出すと、その値で promise が 満たされます。

ただし、ひねりを加えて、Promise を使用して呼び出すこともできますdeferred.resolve。この場合、最初の Promise は、渡された Promise の状態を多かれ少なかれ想定します。たとえば、渡されたプロミスが「保留中」状態の場合、プロミスは渡されたプロミスの保留状態を採用します。これは、名前が付けられたメソッドがresolve実際には promise を解決しないという、少し奇妙なセマンティクスを意味します。

于 2013-08-18T02:39:22.910 に答える