-3

我讀了約await停止執行,而承諾沒有得到解決。我試圖做到以下幾點在我的陣營原生應用程序:ES6/7等待異步功能

static async getFromStorage(key) { 
    const value = await AsyncStorage.getItem(key); 
    console.log(value); 
    return value; 
} 

console.log(Class.getFromStorage("test")); 

,但我得到的,而不是按照實際價值(瀏覽器並沒有讓我複製時間戳...):

  • 無極{_45:0,_81:0,_65:空,_54:空} < - 這是功能
  • 100ms後,
  • REAL_VALUE <後的console.log - 這是控制檯.log來自函數

那麼爲什麼我的代碼沒有等待解決諾言?

UPDATE

@thedude建議:

async function waitForStorage() { 
    console.log(await getFromStorage()); 
} 
waitForStorage(); 

這個解決方案的問題,我需要什麼我想使用的類。但是當我做someVar = await getFromStorage()時,我得到了500錯誤。我可以等它,因爲它是100ms。

例如:

someVar = await getFromStorage("token"); 
checkToken(someVar); 
+0

您是否使用了transpilier如巴貝爾? es6/7在任何地方都不支持。關於異步等待的要點是以同步方式編寫異步代碼。在你等候的聲明應該被執行之前什麼都沒有,直到等待的許諾被解決或被拒絕。 –

+0

@KyleRichardson我寫道我使用的是React-native,它使用了Babel。是的,這是我期待的等待,但似乎執行的順序是不正確的。 – PumpkinSeed

+0

我的歉意,我錯過了 - 原聲部分。我會試圖找出它,它應該爲你工作......我在我的nodejs代碼中使用異步等待模式,它奇妙地工作。 –

回答

1

運行console.log也應標記爲async,它也應該await的代碼的getFromStorage的返回值;

例如這會工作:

async function waitForStorage() { 
    console.log(await getFromStorage()); 
} 
waitForStorage(); // now the console messages should be in the correct order 

或者您也可以等待承諾的分辨率:

getFromStorage("token").then(someVar => checkToken(someVar)) 
+0

我更新了這篇文章,因爲這不是我正在尋找的內容。 – PumpkinSeed

+0

@PumpkinSeed你所尋找的是不可能的,除非你用'async'標記調用'await'的作用域。最簡單的解決方案就是等待承諾,例如'getFromStorage(「token」)。then(someVar => checkToken(someVar))' – thedude

+0

是的,我做到了,謝謝。你能更新這個帖子嗎? – PumpkinSeed