0

Dart で MVC フレームワークを実装しています。私は find メソッドを実装しており、そのクエリからドキュメントを返すようにしたいと考えています。

問題は、find() が操作が実行されるのを待たず、then() 内で関数をバインドする必要があることです。

 static find(model, [params]){
     Db db = new Db("mongodb://127.0.0.1/dart");
     var models = [];
     db.open().then((o){
         return db.collection(model).find(params).forEach((d){
         models.add(d);
         });
     });
     return models;
}

現在、find() からの戻り値は [] です。書類を適切に返却する方法を知っていますか?

4

2 に答える 2

2
 static Future<List> find(model, [params]){
     Db db = new Db("mongodb://127.0.0.1/dart");
     var models = [];
     return db.open().then((o){
       db.collection(model).find(params).forEach((d){
         models.add(d);
       });
       return models;
     });
}

そしてそれを次のように使用します

find(model, [p1, p2, p3]).then((m) => ...);
于 2014-06-10T17:47:23.460 に答える
2

フレームワークの同期 API が絶対に必要な場合は、残念ながら mongo_dart ではうまくいきません。非同期APIの上に同期ファサードを構築する方法はなく、mongo_dart(またはDart AFAIKの他のデータベースドライバー、たとえばpostgresqlまたはsqljockyを参照)は非同期です。

他の言語で同期 mongodb ドライバーを使用した経験は、ここでは完全には当てはまりません。Mongo_dart は、nodejs の mongodb ドライバーにはるかに似ています - 非同期でもあります。nodejs 非同期ドライバーの場合、結果を同期的に取得することもできません。関連する質問を参照してください。

nodejs mongodb ドライバーの同期関数呼び出しまたは Node.js で同期 MongoDB クエリを作成する正しい方法は何ですか?

したがって、非同期コードを採用するか、Python に戻る必要があると思います。Dart はコンソール アプリケーションでいくつかのことを同期的に実行できますが、ここではすべてのネットワークが完全に非同期であると私は信じています。

于 2014-06-11T08:33:54.217 に答える