gpt4 book ai didi

model - 从RethinkDB获取数据

转载 作者:行者123 更新时间:2023-12-03 03:26:44 25 4
gpt4 key购买 nike

在“Dart可伸缩应用程序开发”一书中,有使用RethinkDB的示例

  class UserStore{
final List<User> users = new List();
User user;
Rethinkdb rdb = new Rethinkdb();
Connection conn;

// opening a connection to the database:
openAndStore() {
rdb.connect(db: "test", port:9090, host: "127.0.0.1").
then((_conn) {
conn = _conn;
storeData(conn);
}).catchError(print);
}



storeData(conn) {
List jobsMap = new List();
for (user in users) {
var jobMap = user.toMap();
jobsMap.add(jobMap);
}
// storing data:
rdb.table("users").insert(jobsMap).run(conn)
.then((response)=>print('documents inserted'))
.catchError(print);
// close the database connection:
close();
}


openAndRead() {
rdb.connect(db: "test", port:9090, host: "127.0.0.1").then((_conn) {
conn = _conn;
readData(conn);
}).catchError(print);
}
// reading documents:
readData(conn) {
print("test3");
rdb.table("users").getAll("1,2,3").run(conn).then((results) {
processJob(results);
close();
});
}


// working with document data:

processJob(results) {
for (var row in results) {
// Refer to columns by nam:
print('${row.id}');
}
}
close() {
conn.close();
}

但实际上,该程序不会导致死亡。尽管它称为openAndRead()。

catchError不起作用。
使用模型和RethinkDB的最简单方法是什么?

最佳答案

我不确定我是否完全理解这个问题,但是我建议使用Dart的async/await语法,因为这会使代码更易于阅读。

例如

main() async {
Rethinkdb rdb = new Rethinkdb();
try {
// get the connection
Connection conn = await rdb.connect(port: 28015);

// insert a row into the users table
await rdb.table('users').insert({'a': 'b'}).run(conn);

// query the users table
Cursor c = await rdb.table('users').run(conn);

// grab all the data from the cursor
List rows = await c.toList();

print(rows);

// close the connection
conn.close();
} catch (e) {
print('catching exception $e');
}
}

您可以创建一个类来保存数据库连接,这样就无需继续打开和关闭它。
class Database {
Rethinkdb _rdb = new Rethinkdb();
Connection _conn;

connect(int port) async {
_conn = await _rdb.connect(port: port);
}

Future<List> fetch() async {
Cursor c = await _rdb.table('users').run(_conn);
return await c.toList();
}

close() {
_conn.close();
}
}

顺便说一句,驾驶员的错误处理可能会中断。
当驱动程序可能应该以错误完成“Future”时,驱动程序将引发错误:
}).catchError((err) => throw new RqlDriverError(
"Could not connect to $_host:$_port. Error $err"));
return _completer.future;

这对于程序包开发人员可能是一个问题。您会注意到,在我上面的main()中,没有捕获到异常。

关于model - 从RethinkDB获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com