gpt4 book ai didi

mysql - Dart 等待内心的 future

转载 作者:行者123 更新时间:2023-11-29 02:22:13 25 4
gpt4 key购买 nike

我正在尝试执行一些查询,这些查询将彼此作为外键引用,因此我必须等到外部 future 完成。该算法放置在返回 future 的函数中。

Future<List<int>> newEntry(Session session) {
bool success = true;
List<int> error = Helpers.formatJsonAndEncodeUtf8(
"ERROR 3623231 (Experiencebox could not be saved )", session: session);
Future coucheFutureQuerySave = new Future(() {
new Couchbase().couchConnExperiencebox.set(uniqueId, UTF8.encode(
documentOriented.toString())).catchError((error) {
print("COUCHEBASE ERROR 338420: " + error.toString());
success = false;
});
}).catchError((error) {
print("COUCHEBASE ERROR 338121: " + error.toString());
success = false;
});
// Save data to MySql Database
//create archiv entry
Future <Results> mysql = mysqlCon.query(
getQuery()).catchError((error) {
print("failed archive");
success = false;
}).whenComplete((){
print("completed archive");
//querystring for insert word
String wordQuery = new Tag().getInsertWordIfNotExists(tags);
mysqlCon.query( wordQuery ).catchError((error) {
print("failed word");
success = false;
}).whenComplete((){
print("completed word");
//query string for insert tags in blog
String tagQuery = new Tag().getInsertTagsInBlogIfNotExists(tags, uniqueId);
mysqlCon.query( tagQuery ).catchError((error) {
print("failed tag in blog");
success = false;
});
});
});
return Future.wait([mysql, coucheFutureQuerySave]).then((e) {
// Save data to CoucheBase
if (success) {
print("completed all");
return Helpers.formatJsonAndEncodeUtf8('OK', session: session, data:
[new JsonObject.fromJsonString('{"id":"' + uniqueId + '"}')]);
} else {
print("failed");
success = false;
}
});
}

运行它时我得到了这个:

=== TO CLIENT ===
completed archive
completed all
=== TO CLIENT ===
failed word
completed word
completed tag in blog
completed voting

所以我的问题是,我如何等待 Future mysql 完成其“childs”(在 whenCompleted() 函数中)。我还尝试使用 then() 而不是 whenCompleted() 但这没有任何区别。

最佳答案

确保在异步函数中调用异步函数时始终返回 future 以保持它们的连接。当你调用像

这样的异步函数时
.then((x) => someAsync())

someAsync() 返回的 future 会自动返回,但是当你的代码有一个像这样的 block 时

.then((x) {
return someAsync()
})

您需要明确返回。

有两行以

开头
mysqlCon.query(

实际上应该是

return mysqlCon.query(

这一行

new Couchbase()

应该是

return new Couchbase()

使用新的异步/等待功能可以显着简化您的代码。

关于mysql - Dart 等待内心的 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29843004/

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