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

如果你的框架的同步 API 对你来说是绝对的要求,恐怕你对 mongo_dart 不走运。无法在异步 API 之上构建同步外观,并且 mongo_dart(或 Dart AFAIK 中的任何其他数据库驱动程序,例如参见postgresqlsqljocky)是异步的。

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

nodejs mongodb驱动程序的同步函数调用在Node.js中进行同步MongoDB查询的正确方法是什么?

所以我想你应该要么接受异步代码,要么回到 python。Dart 可以在控制台应用程序中同步做一些事情,但我认为所有的网络都是完全异步的。

于 2014-06-11T08:33:54.217 回答
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 回答