2017-09-08 3 views
1

私は、 から返された結果にArray.filter()を使用しようとしていますが、動作しません!
私はこのエラーになっています:あなたが結果を返す通常の関数として、非同期関数を使用することを、あなたのコードでnode.js mongodb find()結果は配列になりますが、.filterは使用されません

(TS) Property 'filter' does not exist on type '{}'.

function find(collectionName: string, filter: any = {},callback: Function) { 
    const MongoClient = require('mongodb').MongoClient; 
    let url = "mongodb://localhost:27017/test"; 

    MongoClient.connect(url, function (err, db) { 
     if (err) { 
      callback(err, null); 
      //throw err; 
      db.close(); 
     } else { 
      let rs = db.collection(collectionName).find(filter, { _id: false }); 

      rs.toArray(function (err, result) { 
       if (err) throw err; 
       callback(null, result); 
       db.close(); 
      });    

     } 

    });//MongoClient 

} 

答えて

0

主な問題を。 Async関数は、非同期操作が完了したときに呼び出している約束またはコールバックを返します。コールバックはコールバック地獄を生成するので、ES7で追加された約束やasync/awaitの機能がはるかに優れています。

固定コード、可能性はそうなります

function find(collectionName: string, filter: any = {}) { 
    const MongoClient = require('mongodb').MongoClient; 
    let url = "mongodb://localhost:27017/test"; 

    return MongoClient 
     .connect(url) 
     .then(db => db.collection(collectionName).find(filter, { _id: false })) 
     .then(rs => rs.toArray()) 
     .finally(() => db.close()); 
} 

つのノート、現在、find機能はcallbackパラメータを受け入れていない、それはコードを呼び出すには、結果を使用するので、約束を返し、あなたが作成する必要があります約束:

find(...) 
    .then(results => // TODO: use results here) 
    .catch(err => // TODO: process error here); 
関連する問題