-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:ヌル} < - これは関数の後にconsole.logある
  • 100msの後
  • REAL_VALUE < - これはコンソールであります.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を使っていると書いています。はい、これも私が期待していることですが、実行の順序が正しいとは思われません。 – PumpkinSeed

+0

私は謝罪しました。私はこれを理解しようとします、それはあなたのために働くはずです...私はnodejsコードで非同期待機パターンを使用し、素晴らしい動作します。 –

答えて

1

console.logasyncとしてマークされるべきであり、それはまた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

関連する問題