JS 中的平面图承诺

edd*_*P23 7 javascript typescript es6-promise

以前肯定有人问过这个问题,但是如何在 JS 中展平承诺?

像这样的东西:

let justAPromise: Promise<something> = aPromise.flatMap( a => getAnotherPromise());
Run Code Online (Sandbox Code Playgroud)

或者像这样:

let promiseOfPromise: Promise<Promise<something>> = aPromise.then( a => getAnotherPromise());
let justAPromise: Promise<something> = promiseOfPromise.flatten();
Run Code Online (Sandbox Code Playgroud)

编辑:

澄清我所说的扁平化承诺的含义。我看到以下两者之间存在巨大差异。第一个是int的promise,第二个是int的promise:

Promise.resolve(23);

Promise.resolve("whatever").then(a => Promise.resolve(23));
Run Code Online (Sandbox Code Playgroud)

Fal*_*aly 11

只需链接您的承诺:

let justAPromise: Promise<something> = aPromise.then( a => getAnotherPromise());
Run Code Online (Sandbox Code Playgroud)

下面的示例向您展示了它是通过这种方式展平的:

let justAPromise: Promise<something> = aPromise.then( a => getAnotherPromise());
Run Code Online (Sandbox Code Playgroud)

  • 是的,如果你返回另一个 `Promise` 或任何其他类型的值,`.then()` 的工作方式会有所不同。 (6认同)
  • 不,这不是 Promise&lt;Promise&lt;something&gt;&gt;。`justPromise` 现在是 `getAnotherPromise` 的返回值 (2认同)
  • K,谢谢,又一个意想不到的 JS 魔法 :) 其他语言并不只是为你扁平化它。 (2认同)