gpt4 book ai didi

dart - sqljocky查询没有方法 'then'(dart数据库访问)

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

我正在尝试使用Dart中的sqljocky对数据库的sql访问进行编码。当我想用数据库处理程序返回的结果进行一些计算时,该方法返回一个Future。

但是,当我尝试运行它时,出现以下错误:

Uncaught Error: The null object does not have a method 'then'`

我已经运行了调试器,发现此错误引发:

db.query('select * from user where email="$email"').then(...)

但是catchError子句不会触发。

我的处理程序方法是:

// db is a ConnectionPool
Future<Map<String,String>> queryUser(String email){
print(email);
db.query('select * from user where email="${email}"').then((result) { // here raise the error
Map<String,String> results = new Map<String,String>();
result.forEach((row){
results['status'] = '200';
results['ID'] = row[0];
results['Image'] = row[1];
results['Name'] = row[2];
results['Email'] = row[3];
results['Password'] = row[4];
});
return results;
}).catchError((error){
Map<String,String> results = new Map<String,String>();
results['status'] = '500';
return results;
});
}

调用此处理程序的方法是:

List getUser(String email) {
Future<Map<String,String>> result = dbhandler.queryUser(email);
result.then((Map<String,String> result) {
String statuscode = result['status'];
result.remove('status');
String json = JSON.encode(result);
List pair = new List();
pair.add(statuscode);
pair.add(json);
return pair;
});

如果我直接在phpmyadmin中运行查询,它将返回正确的数据,因此它是正确的。

有人可以给我提示如何解决吗?

最佳答案

queryUser()方法将始终返回null,因为没有return语句。在下一版的Dart中,将对此进行静态提示警告,但目前还没有。

也许下面的代码就是您想要做的。注意db.query()之前的初始return语句,以及额外的result.toList()调用。我没有测试过,所以可能有一两个错字。

Future<Map<String,String>> queryUser(String email){
print(email);
return db.query('select * from user where email="${email}"')
.then((result) => result.toList())
.then((rows) {
var row = rows.single;
Map<String,String> results = new Map<String,String>();
results['status'] = '200';
results['ID'] = row[0];
results['Image'] = row[1];
results['Name'] = row[2];
results['Email'] = row[3];
results['Password'] = row[4];
return results;
}).catchError((error){
Map<String,String> results = new Map<String,String>();
results['status'] = '500';
return results;
});
}

您还可以使用 map 文字使之更可爱:

Future<Map<String,String>> queryUser(String email){
return db.query('select * from user where email="${email}"')
.then((result) => result.toList())
.then((rows) => <String, String> {
'status': '200',
'ID': rows.single[0],
'Image': rows.single[1],
'Name': rows.single[2],
'Email': rows.single[3],
'Password': rows.single[4] })
.catchError((error) => <String, String> {'status': '500'});
}

关于dart - sqljocky查询没有方法 'then'(dart数据库访问),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051810/

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