2015-09-25 14 views
6

Sono consapevole che il driver Node per Mongo può essere promisified utilizzando librerie esterne. Ero curioso di vedere se promesse ES6 potrebbero essere utilizzati con MongoClient.connect, così ho provato questo (usando Babele 5.8.23 a transpile):Utilizzo di promesse native ES6 con MongoDB

import MongoClient from 'mongodb'; 

function DbConnection({ 
    host = 'localhost', 
    port = 27017, 
    database = 'foo' 
}) { 
    return new Promise((resolve, reject) => { 
    MongoClient.connect(`mongodb://${host}:${port}/${database}`, 
    (err, db) => { 
     err ? reject(err) : resolve(db); 
    }); 
    }); 
} 

DbConnection({}).then(
    db => { 
    let cursor = db.collection('bar').find(); 
    console.log(cursor.count()); 
    }, 
    err => { 
    console.log(err); 
    } 
); 

L'uscita è {Promise <pending>}. Qualsiasi cosa abbia a che fare con i cursori sembra dare un risultato simile. C'è un modo per aggirare questo o sto abbaiando completamente dall'albero sbagliato?

Modifica: nodo versione 4.1.0.

risposta

10

Non c'è niente da aggirare, questo è il comportamento previsto. cursor.count() restituisce una promessa, se si desidera il valore, è necessario utilizzare .then, ad es.

DbConnection({}).then(
db => { 
    let cursor = db.collection('bar').find(); 
    return cursor.count(); 
    } 
}).then(
    count => { 
    console.log(count); 
    }, 
    err => { 
    console.log(err); 
    } 
); 

o semplificata

DbConnection({}).then(db => db.collection('bar').find().count()).then(
    count => console.log(count), 
    err => console.log(err) 
); 
+0

Buona dolore. Grazie, a quanto pare ho continuato a fissarlo per troppo tempo! –

+1

Abbiamo tutti quei tempi :) – loganfsmyth

+2

IME, non c'è bisogno di 'err => {console.log (err}' - basta mettere 'console.log' nel parametro di errore' .then' – Alnitak

0

Un'altra sintassi per la risposta di loganfsmyth (grazie dal modo)

cursor.count().then(function(cursor_count){ 
    if(cursor_count){ 
    // use cursor 
    }else{ 
    // no results 
    } 
} 
Problemi correlati