我在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()的返回是[]。你知道如何正确归还文件吗?
答案 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中的任何其他数据库驱动程序,例如,请参阅postgresql或sqljocky)是异步的。
您使用任何其他语言的同步mongodb驱动程序的经验并不完全适用于此处。 Mongo_dart更类似于nodejs的mongodb驱动程序 - 异步也是如此。 对于nodejs异步驱动程序,您也无法同步获得结果,请参阅相关问题:
Synchronous function calls for nodejs mongodb driver或 What is the right way to make a synchronous MongoDB query in Node.js?
所以我猜你应该拥抱异步代码或者返回python。 Dart可以在控制台应用程序中同步执行某些操作,但我相信所有的网络在这里完全异步。