1. ホーム
  2. javascript

[解決済み] Promiseから複数の値を正しく返すには?

2022-11-14 20:45:53

質問

最近、ある状況に何度か遭遇したのですが、適切な解決方法が分かりませんでした。以下のようなコードを想定してください。

somethingAsync()
  .then( afterSomething )
  .then( afterSomethingElse )
  
function afterSomething( amazingData ) {
  return processAsync( amazingData );
}
function afterSomethingElse( processedData ) {
}

さて、ある状況下で、私は amazingDataafterSomethingElse .

明らかな解決策は afterSomething なぜなら、関数からは1つの値しか返せないからです。というのも、関数からは1つの値しか返せないからです。 afterSomethingElse が2つのパラメータを受け取り、同様にそれを呼び出す方法があるかどうか、それは文書化し理解するのがずっと簡単に思えるからです。

があるので、私はこの可能性について疑問に思っているだけです。 Q.spread があり、これは私が欲しいものと似たようなことをします。

どのように解決するのですか?

関数から複数の値を返せないのと同じように、複数のプロパティを持つプロミスを解決することはできません。 . プロミスは概念的に時間をかけて値を表すので、複合的な値を表すことはできても、複数の値をプロミスに入れることはできないのです。

プロミスは本質的に単一の値で解決します。これはQの動作の一部です。 Promises/A+の仕様がどのように機能するか そしてどのように 抽象化 がどのように機能するのかを説明します。

最も近いのは Q.spread を使って配列を返すか、サポートされている場合はES6 destructuringを使うか、BabelJSのようなトランスパイルツールを使用することです。

プロミスの連鎖でコンテキストを渡すことに関しては、以下を参照してください。 Bergiの素晴らしいcanonicalを参照してください。 .