【问题标题】:Get a value inside a Promise Typescript在 Promise Typescript 中获取一个值
【发布时间】:2016-12-26 05:15:06
【问题描述】:

打字稿类中的一个函数返回Promise<string>。我如何解开/产生该承诺中的价值。

functionA(): Promise<string> {
   // api call returns Promise<string>
}

functionB(): string {
   return this.functionA() // how to unwrap the value inside this  promise
}

【问题讨论】:

  • 你不能直接从 Promise 中获取值。您在 promise 上使用 .then() 处理程序来访问该值。
  • 这根本不可能,你买的东西还没发货就不能玩了,即使你有发货通知也不行;或者商店的人向您保证包裹正在运送中。 Promise 管理时间,你想要的字符串还不存在,除了then() 之外,没有办法知道它什么时候会出现。 functionB() 必须返回一个 Promise,这是没有办法的。

标签: javascript typescript promise es6-promise


【解决方案1】:

我如何解开/产生承诺中的价值

你可以用async/await来做到这一点。不要误以为你只是从异步转到同步,异步等待它只是.then的包装。

functionA(): Promise<string> {
   // api call returns Promise<string>
}

async functionB(): Promise<string> {
   const value = await this.functionA() // how to unwrap the value inside this  promise
   return value;
}

进一步

【讨论】:

  • * 链接不再可用并重定向到主页。它也感觉非常促销(尽管作者可能有很好的意图)。请管理员调查一下。
  • 我确实链接到我写的文档,但我很小心地在 more / further 部分下进行链接。为了减少我添加到答案正文中的促销感觉?
  • 我也遇到了同样的问题,按照上面的建议进行操作,然后以同步方式调用 functionB。当你需要 promise 的结果时,确保它仍然是 async() => { value = await functionB() } 等等。
  • 很好的答案。这有助于我理解 TypeScript 中的 async/await。
【解决方案2】:

试试这个

functionB(): string {
   return this.functionA().then(value => ... );
}

【讨论】:

  • 仍然返回Promise&lt;string&gt;
  • 是的,我明白这一点。我需要返回string,而不是Promise&lt;string&gt;
  • @Rjk 你不能返回字符串。你必须返回 promise 并在调用函数中将 then 中的值分配给你的变量
  • functionA 是异步的,因此您不可能通过 functionB 从其中返回单个 string 值。您可以通过将callback 传递给functionB 来解决问题,但这会破坏将functionB 置于其间的目的。 @SurenSrapyan 的回答是正确的,您应该进一步处理 .then() 内的 string
  • @SurenSrapyan 我对这个答案投了反对票,因为你没有回答 Rjk 的问题;你回答了一个不同的问题,然后在你的 cmets 中告诉 Rjk 原来的问题是错误的。
猜你喜欢
  • 2018-07-27
  • 2014-09-22
  • 2017-10-26
  • 2020-12-08
  • 2018-05-24
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多