2016-10-31 3 views
-1

非同期/コンパイル中にスローエラーが発生するのを待ちます。 Imは現在、プリセット付きのバベルを使用しています - es2015、&プラグイン - transform-async-to-generator。async/es2015でスローエラーが発生する

async function verifyUserAlreadyExists(phone, email) { 
    try { 
     db.collection("users").find({ 
     $or:{"contact_details.phone": phone, "contact_details.email": email} 
     }, (err, cursor)=>{ 
       await cursor.count() >= 1; 
     }); 
    }catch(err) { 
     console.log("Verify User Exists:"+JSON.stringify(err)); 
    } 
} 

export default { 
    getAllUsers: (request, reply) => { 
     db.collection("users").find({}).toArray((err, users) => { 
      reply(users); 
     }); 
    }, 
    insertNewUser: (request,reply) => { 
     let userAlreadyExists = await verifyUserAlreadyExists("7259769413"); 
     console.log(userAlreadyExists); 
    } 
} 
+0

'async'関数の中で' await'します。 –

+0

それはコールバックなので、非同期にするにはどうすればいいですか? – manju4ever

+1

構文エラーを修正するのは簡単です( 'async(err、cursor)=> {...}')。問題はa) '.find()'が約束を返し、b) '.find()'が非同期コールバックを処理できるかどうかです。ですから '.find'メソッドはどのくらい正確に動作しますか? 'await'をどこかに挿入するだけで、' async'関数を使うことはできません。 'async'関数を呼び出すはずのコードは、非同期関数を処理できる必要があります。そこに「待って」いる必要がありますか? 'cursor.count()'は何を返しますか? –

答えて

3

の下に自分のコードをチェックしてくださいMongoDBのドライバは、すべての非同期機能のための約束を返すので、それがすべてでコールバックを使用しないように、あなたはあなたのコードを書き換える必要がありますすることができます:あなたが唯一使用できる

async function verifyUserAlreadyExists(phone, email) { 
    try { 
    let cursor = db.collection("users").find({ 
     $or : { 
     "contact_details.phone" : phone, 
     "contact_details.email" : email 
     } 
    }); 
    return await cursor.count() >= 1; 
    } catch(err) { 
    console.log("Verify User Exists:"+JSON.stringify(err)); 
    return false; 
    } 
} 

export default { 
    getAllUsers: async (request, reply) => { 
    return await db.collection("users").find({}).toArray(); 
    }, 
    insertNewUser: async (request,reply) => { 
    let userAlreadyExists = await verifyUserAlreadyExists("7259769413"); 
    console.log(userAlreadyExists); 
    return userAlreadyExists; 
    } 
} 
+0

s/can/should/:-D – Bergi

+0

ありがとうございました。しかし、私はReferenceErrorを取得しています:regeneratorRuntimeは定義されていません。私のコードに何か問題がありますか? – manju4ever

+0

待って、 'find()'が約束を返すなら、 'let cursor = await ...'を使う必要はありませんか? – Bergi

関連する問題