Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从承诺返回值:[对象]_Javascript_Reactjs_Asynchronous_React Native_Promise - Fatal编程技术网

Javascript 从承诺返回值:[对象]

Javascript 从承诺返回值:[对象],javascript,reactjs,asynchronous,react-native,promise,Javascript,Reactjs,Asynchronous,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

反应本地开发:

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
我正在构建react本机应用程序,并且正在学习理解承诺所需的基础知识。我发现很难弄清楚为什么会发生一些事情。到目前为止,我最大的问题是,我无法从承诺中获得回报。这是我的功能,这是控制台日志:

功能:

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
控制台日志:

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

快速观察:外部在内部之前打印(可能是因为承诺的异步性质)。

解决方案:通过使我的整个函数异步并使外部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)
 }

可能的副本。我认为没有理由为此创建一个新的问题/答案,上面提到的副本还包含一个非常详细的答案,其中包括
ES2017+:承诺使用async/await
@Igor您假设此人知道异步调用的功能连接的详细信息,而他可能不知道。因此,将其标记为复制品并不完全正确,即使从技术上讲是这样。这只是另一个例子,人们搜索(并发布)某些特定问题,这些问题在概念上与其他问题类似,之前已经回答过,但术语缠身。不确定为什么会被否决,似乎您离理解承诺和异步过程如何工作又近了一步。。。异步进程不能在同步上下文中返回。Async await使上下文异步。传统的方法是保持上下文同步,并在异步进程完成时使用回调来执行操作。