MongoDart发现有问题

时间:2014-06-10 17:43:28

标签: mongodb dart dart-async

我在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()的返回是[]。你知道如何正确归还文件吗?

2 个答案:

答案 0 :(得分: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) => ...);

答案 1 :(得分:2)

如果你的框架的同步API是你的绝对要求,我恐怕你对mongo_dart没有好运。 无法在异步API之上构建同步外观,mongo_dart(或Dart AFAIK中的任何其他数据库驱动程序,例如,请参阅postgresqlsqljocky)是异步的。

您使用任何其他语言的同步mongodb驱动程序的经验并不完全适用于此处。 Mongo_dart更类似于nodejs的mongodb驱动程序 - 异步也是如此。 对于nodejs异步驱动程序,您也无法同步获得结果,请参阅相关问题:

Synchronous function calls for nodejs mongodb driverWhat is the right way to make a synchronous MongoDB query in Node.js?

所以我猜你应该拥抱异步代码或者返回python。 Dart可以在控制台应用程序中同步执行某些操作,但我相信所有的网络在这里完全异步。