2016-10-31 3 views
-1

Async/erwarten Wurf Fehler beim Kompilieren. Im Moment benutze ich Babel mit Voreinstellungen - es2015, & plugin - transform-async-to-generator. Überprüfen Sie meinen Code untenAsync/erwarten werfen Fehler in 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

können Sie nur verwenden, 'erwarten' innerhalb' async' Funktionen. –

+0

So wie das ist ein Rückruf, wie man es async macht? – manju4ever

+1

Das Korrigieren des Syntaxfehlers ist einfach ('async (err, cursor) => {...}'). Die Frage ist, ob a) '.find()' eine Zusage zurückgibt und b) '.find()' kann asynchrone Rückrufe verarbeiten. Also, wie genau funktioniert die '.find' Methode? Sie können nicht einfach irgendwo eine "erwarten" einfügen oder eine Async-Funktion verwenden. Code, der die Async-Funktion aufrufen soll, muss Async-Funktionen verarbeiten können. Brauchst du da noch ein "erwarten"? Was gibt 'cursor.count()' zurück? –

Antwort

3

Da die MongoDB-Treiber verspricht für alle Asynchron-Funktionen zurückgibt, Sie können sollten Sie den Code neu schreiben, damit es nicht Rückrufe überhaupt zu verwenden ist:

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/sollte/:-D – Bergi

+0

Vielen Dank. Aber ich bekomme ReferenceError: RegeneratorRuntime ist nicht definiert. Stimmt etwas nicht mit meinem Code? – manju4ever

+0

Warte, musst du 'let cursor = await ... 'nicht verwenden, wenn' find() 'ein Versprechen zurückgibt? – Bergi