【问题标题】:Returning a value from a Promise: [Object Object]从 Promise 返回一个值:[Object Object]
【发布时间】:2017-08-08 14:57:00
【问题描述】:

React Native 开发:

我正在构建一个 React Native 应用程序,并且正在学习理解 Promise 所需的基础知识。我发现很难弄清楚为什么会发生一些事情。到目前为止,我最大的问题是我无法从承诺中返回的值。这是我的功能,这里是控制台日志:

功能:

getUri(){
    var data = this.apiclient.retrieveImages()
    var outside_uri = data.then((uri) => { console.log('inside => ' + uri); return uri;})
    console.log('outside => ' + outside_uri)
 }

控制台日志:

outside => [object Object]
inside => https://firebasestorage.googleapis.com/v0/b/facelapse-50017.appspot.com/o/Q…M0p7x1ROK0yIN02%2F001?alt=media&token=31de9def-cd32-4d5c-ad65-f3f65ad76685

快速观察:外部先于内部打印(可能是由于 Promise 的异步性质)。

【问题讨论】:

  • How do I return the response from an asynchronous call? 的可能重复项。 我认为没有理由为此创建一个新问题/答案,上述副本还包含一个非常详细的答案,其中包括 ES2017+: Promises with async/await
  • @Igor 您假设此人知道有关与 异步 调用的功能连接的详细信息,但他可能不知道。因此,即使从技术上讲,将其标记为重复项也不完全正确。这只是人们搜索(和发布)某些特定问题的另一种情况,这些问题在概念上与其他一些先前已回答但行话缠身的问题在概念上相似。

标签: javascript reactjs asynchronous react-native promise


【解决方案1】:

解决方案:通过使我的整个函数异步并让 outside_uri 等待承诺的执行,在承诺完成之前不再评估外部。

async getUri(){
    var data = this.apiclient.retrieveImages()
    var outside_uri = await data.then((uri) => { console.log('inside => ' + uri); return uri;})
    console.log('outside => ' + outside_uri)
 }

【讨论】:

  • 不知道为什么这被否决了,似乎您已经更接近了解承诺和异步流程的工作原理了......异步流程无法在同步上下文中返回。 Async-await 使上下文异步。传统的方法是让上下文保持同步,并在异步过程完成时使用回调来采取行动。
猜你喜欢
  • 2018-03-25
  • 2021-09-14
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2021-10-17
  • 2020-04-13
  • 2022-08-19
相关资源
最近更新 更多