1. ホーム
  2. ジャバスクリプト

[解決済み】プロミスの値にアクセスする方法は?

2022-04-09 09:55:33

質問

Angularのドキュメントからこの例を見ています。 $q が、これはおそらくプロミス一般に適用されると思います。以下の例は、彼らのドキュメントからそのままコピーしたもので、彼らのコメントも含まれています。

promiseB = promiseA.then(function(result) {
  return result + 1;
});

// promiseB will be resolved immediately after promiseA is resolved and its value
// will be the result of promiseA incremented by 1

この仕組みがよくわからない。もし私が .then() の結果に対して、最初の .then() を連鎖させることができることは知っています。 promiseB はプロミスオブジェクトであり、型は Object . これは Number . では、quot;その値はpromiseAを1だけ増加させた結果になる"とはどういう意味なのでしょうか?

としてアクセスすればいいのでしょうか? promiseB.value といった感じでしょうか?成功コールバックがプロミスを返し、かつ "result + 1" を返すにはどうしたらいいでしょうか?私は何かを見逃しています。

解決方法は?

promiseA 's then 関数は、新しいプロミス ( promiseB の直後に解決される) promiseA が解決されたとき、その値は、その中の成功関数から返されたものの値です。 promiseA .

この場合 promiseA は、値 - で解決されます。 result を実行した後、すぐに promiseB の値で result + 1 .

の値にアクセスする。 promiseB の結果にアクセスしたのと同じ方法で行われます。 promiseA .

promiseB.then(function(result) {
    // here you can use the result of promiseB
});


2019年12月編集 : async / await がJSで標準化されたことで、上記のアプローチとは別の構文が可能になりました。書けるようになりました。

let result = await functionThatReturnsPromiseA();
result = result + 1;

ここで,promiseBは存在しません.なぜなら,promiseAからの結果を await で、それを直接操作することができます。

しかし await の中でしか使用できません。 async 関数を使用します。つまり、少しズームアウトするには、上記はこのように収めなければならないのです。

async function doSomething() {
    let result = await functionThatReturnsPromiseA();
    return result + 1;
}