_p1
_は_console.log
_で直接呼び出されるため、promiseハンドラーがpromise _p1
_(値 "A"ではない)をログに記録することを期待していました。しかし、どういうわけか「A」を記録します。約束_p1
_は、呼び出されることなく自動的に「A」に解決されますか?たとえば、console.log(p1)
は、期待どおりに「A」を直接出力しません。舞台裏で何かが起こっていますか?
_var p1 = new Promise(function(resolve, reject) {
resolve("A");
});
var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
_
編集:私はその呼び出しを理解しています
_p1.then((v) => return v))
_
値vで満たされる新しいpromiseを返します。Imがここで何かを深刻に見逃していない限り、2番目のpromiseコンストラクターの「p1」参照はconsole.logに直接渡され、ブロックになります。
_var p2 = new Promise(function(resolve, reject) {
resolve(p1);
});
p2.then(function(v) {
console.log(v)
});
_
になる
_console.log(p1).
_
Console.logはp1.then(...)の結果ではなく、p1で直接呼び出されるため、別のプログラムを出力するのと同じ方法で、p1を値「A」に解決しないでください。
_var promise = new Promise(function(resolve, reject) {
resolve("B")
})
console.log(promise)
_
文字列「B」にはなりません。
EDIT2:エグゼキュータに渡されたresolveパラメータが満たされていない関数のラッパーであると誤解していたため、多くの混乱が生じました。詳細については、 Promiseコンストラクターが完了時に 'resolve'を呼び出す関数を必要とするのに、 'then'は必要としないのはなぜですか?代わりに値を返しますか? .
約束を別の約束に解決すると、自動的に他の約束の結果を待機します。
これがpromiseを連鎖可能にするものです(then()
コールバックでさらにpromiseを返します)。
MDNドキュメント から:
Promise.resolve(value)
指定された値で解決されるPromiseオブジェクトを返します。値がthenableである場合(つまり、thenメソッドがある場合)、返されるpromiseはそのthenableを「フォロー」し、最終的な状態を採用します。それ以外の場合、返された約束は値で満たされます。一般に、値がpromiseであるかどうかわからない場合は、代わりにPromise.resolve(value)を使用して、戻り値をpromiseとして処理します。
p1
はその後可能であるため、リターンプロミスはそれに続きます。