2016-11-11 7 views
0

Firebaseからの情報を読み込んでいるスクリプトがあり、thenがそれを処理しています。これには、外部データソースへの非同期呼び出しがいくつか含まれており、そのためにasyncawaitを使用します。私はこの非常にnpmのプロジェクトでこれをうまくやったので、今はなぜうまくいかないのか分かりません。これは私の.babelrcファイルです:Babel-nodeスクリプトが '予期しないトークン' syntaxError 'await'行で失敗しました

{ 
 
    "presets": ["es2015", "stage-0", "react"], 
 
    "plugins": ["syntax-async-functions","transform-regenerator"] 
 
}

そして、これは私のコードの要旨です:

var config = { 
 
    apiKey: "key", 
 
    authDomain: "myProject.firebaseapp.com", 
 
    databaseURL: "https://myProject.firebaseio.com", 
 
    storageBucket: "myProject.appspot.com", 
 
    messagingSenderId: "id" 
 
}; 
 
Firebase.initializeApp(config); 
 

 
var dbRef = Firebase.database().ref(); 
 

 
getAllFirebaseDocs(dbRef); 
 

 
async function getAllFirebaseDocs(dbRef) { 
 
\t return dbRef.once('value').then(function(snapshot) { 
 
\t \t var items = snapshot.val(); 
 
     for (key in items) { 
 
      var priceUrl = "some.url.com" 
 
\t \t  items[key] = await requestPrices(items[key], priceUrl); 
 
     } 
 
    } 
 
} 
 
\t \t

それはSyntaxError: testScript.js: Unexpected tokenawait行に失敗しています。そして、このような奇妙なボックス文字と33mと39mのコードの束:[33m][39m[1m,[22m priceUrl[94m[1m)[22m[39m[1m;[22m

私はbabel-node testScript.jsでスクリプトを実行しています。私はbabel-nodeと同じプロジェクトで実行する別のスクリプトを持っているので、この作品を知っているとそれはうまく動作する非同期の部分があります...私はこの1つを見逃しているか分からない。問題がある場合は、babel-node -Vがv6.4.0を返します。

答えて

2

awaitは、asyncというマークが付けられた機能内でのみ使用できます。あなたの場合は、そのようにマークされていない関数(.then()のコールバック)の中で実行しています。

return dbRef.once('value').then(async function(snapshot) { ... }); 

をしかし、あなたはすでにasync/awaitを使用していることから、あなたにもこれにあなたのコードを書き換えることがあります:

あなたはこれを使用することができます(どちらの場合も

async function getAllFirebaseDocs(dbRef) { 
    let snapshot = await dbRef.once('value'); 
    let items = snapshot.val(); 
    for (let key in items) { 
    let priceUrl = "some.url.com" 
    items[key] = await requestPrices(items[key], priceUrl); 
    } 
    // I assume that you want to return `items`; your original code doesn't return anything. 
    return items; 
} 
+0

インライン非同期にして再配置します非同期)、それは私に新しいエラーを与えます: 'あなたはノード型ForAwaitStatementの訪問者を私たちに与えましたが、それは有効な型ではありません。これが起こっている行番号を私に与えないでください。 – IronWaffleMan

+0

ああ、私はそれを解決しました。私のbabel-coreを6.18.2にアップグレードし、私の.babelrcファイルから 'stage-0'を削除しました。今、私のスクリプトが動作します、ありがとう:) – IronWaffleMan

関連する問題