Typescript 无法识别我的 Promise.all 中的承诺已得到履行

Duc*_*les -3 javascript typescript

我目前有一个设置,我启动几个异步请求并在最后等待 Promise.all() 。然而 Typescript 仍然认为承诺尚未兑现。

例子:

const Promise1 = someAsync()
const Promise2 = someAsync()
const Promise3 = someAsync()
await Promise.all([Promise1, Promise2, Promise3])
console.log(Promise1.someData) // is a problem
Run Code Online (Sandbox Code Playgroud)

我想我可以在控制台日志中再次等待 Promise1,但这似乎有点不完整,有什么想法吗?或者我在 console.log 点解析 Promise1 是错误的吗?

jse*_*ksn 5

您需要等待 的返回值中的解析值Promise.all()。APromise本身永远不会有someData属性:

TS游乐场

<script type="module">

function someAsync () {
  const result = {someData: Math.random()};
  return Promise.resolve(result);
}

const promise1 = someAsync();
const promise2 = someAsync();
const promise3 = someAsync();
await Promise.all([promise1, promise2, promise3])
console.log(promise1.someData); /* Will log `undefined` because:
                     ~~~~~~~~
Property 'someData' does not exist on type 'Promise<{ someData: number; }>'.(2339) */

// Instead, await the resolved values:
const [resolved1, resolved2, resolved3] = await Promise.all([promise1, promise2, promise3])
console.log(resolved1.someData);
                    //^? (property) someData: number

</script>
Run Code Online (Sandbox Code Playgroud)