2017-11-13 5 views
3

私はマングースを使用してNodejsアプリケーションでメモリ内とのMongoDBデータベースにMongoDBを使用してキャッシュを実装しています。ここではNodejs 8.9がasync/awaitサポートで使用されています。JavaScriptで


let get_func = async(userId) => { 

    let is_cached = await cache_user.findOne({ user_id: userId }); 

    if(!is_cached){ 
     console.log("NOT CACHIED"); 
     let is_dbuser = await db_user.find({}); 
     console.log(is_dbuser); 

    } else { 
     console.log("CACHED"); 
    } 

    console.log("LEAVING get_func") 
}; 

get_func(100); 

そして、ここでは出力です:

NOT CACHIED 
[] 
LEAVING get_func 

しかしdb_userがデータで満たされていると使用して検証することができました。またlet is_error, is_dbuser = await db_user.find({});場合で確認

db_user.find({}, function(err, users) { 
    if (err) throw err; 
    console.log(users); 
}); 

をあります 関数がエラーを返し、その順序で結果を返すことを疑う。

どのようにしてこのネストされたawait文を処理する必要がありますか。 (しかし、機能が期待どおりに2秒待っているようです)。

+0

は 'is_errorせ括弧の前にスペースが必要な場合がありますしない限り、それはfindByIdを使用する方が理にかなっていることに注意してください、 is_dbuser = db_user.find({})を待つ; 'うまく動作しない。約束が拒否された場合は、スローのように振る舞います。 –

+0

約束を返すようです。他のmoongoseクエリとうまく動作します。内側の待ちだけに問題があります。 – Chathuranga94

+0

私はMongooseで本格的な約束を得るには 'exec()'が必要であることを覚えているようです。しようとしました: 'b_user.find({})。exec()'? –

答えて

1

これを行う代わりに、

let get_func = async (userId) => { 

    let is_cached = await cache_user.findById(userId); 

    if(!is_cached){ 
     console.log("NOT CACHIED"); 
     let is_dbuser = await db_user.find({}); 
     console.log(is_dbuser); 

    } else { 
     console.log("CACHED"); 
    } 

    console.log("LEAVING get_func") 
}; 

get_func(100); 

取ってください、それはあなたのクエリの要件を満たしていないとも非同期が