2017-08-08 25 views
0

陣營原生開發:返回從無極的值:[對象對象]

我在建立一個反應本機應用程序的過程中,我想了解學習的承諾所需要的基本知識。我發現很難弄清楚爲什麼有些事情正在發生。迄今爲止,我最大的問題是我從承諾中回報的價值無法獲得。這裏是我的功能,這裏是控制檯日誌:

功能:

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 

快速觀察:外面是前內側印刷(可能是因爲承諾的異步性質)。

+3

的[我如何返回從一個異步調用的響應?(可能的複製https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous呼叫)。 *我沒有理由爲此創建新的問題/答案,上面提到的重複內容還包含一個非常詳細的答案,其中包括'ES2017 +:承諾異步/等待'。* – Igor

+0

@Igor您假定該人知道有關與* asynchronous *調用的功能連接的細節,可能他沒有。因此,從技術上講,將其標記爲重複是不完全正確的。這僅僅是人們搜索(和發佈)某個特定問題的另一種情況,這些問題最終會在概念上類似於以前回答的其他問題,但卻是行話纏身的問題。 – not2qubit

回答

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) 
} 
+1

不知道爲什麼這是downvoted,好像你已經接近了一步瞭解承諾和異步過程如何工作...異步過程不能在同步上下文中返回。異步等待使上下文異步。常規方法是在異步過程完成時使上下文保持同步並使用回調來執行操作。 –