2015-09-25 2 views
6

Mongoのノードドライバは、外部ライブラリを使用してpromisifiedにすることができます。私はES6の約束はMongoClient.connectで使用することができれば見て興味があったので、私は(transpileにバベル5.8.23を使用して)、これを試してみました:MongoDBでのネイティブES6の約束の使用

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); 
    } 
); 

出力が{Promise <pending>}です。カーソルと関係するものは、同様の結果をもたらすようです。これを回避する方法はありますか、間違ったツリーを完全に吠えるのですか?

編集:ノードバージョン4.1.0。

答えて

10

回避することは何もありませんが、これは予想される動作です。 cursor.count()は約束を返します。値が必要な場合は.thenを使用する必要があります。

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

または簡略化

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

やれやれ。ありがとう、明らかに私はそれをあまりにも長く注視してきました! –

+1

私たちはすべてその時を持っています:) – loganfsmyth

+2

IME、 'err => {console.log(err}')は必要ありません。 'console.log'を' .then'エラーパラメータ – Alnitak

0

loganfsmythの応答のためのもう一つの構文(ちなみに感謝)

cursor.count().then(function(cursor_count){ 
    if(cursor_count){ 
    // use cursor 
    }else{ 
    // no results 
    } 
} 
関連する問題