gpt4 book ai didi

asynchronous - Future ,异步,等待,然后在Flutter/Dart中捕获catchError

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

之间有什么区别?

Future ,异步,等待,然后catchError

Future<void> copyToClipboard(BuildContext context, String text) async {
await Clipboard.setData(ClipboardData(text: text))
.then((_) => showSnackBar(context, 'Copied to clipboard'))
.catchError((Object error) => showSnackBar(context, 'Error $error'));
}

无效,异步,等待,然后catchError
void copyToClipboard(BuildContext context, String text) async {
await Clipboard.setData(ClipboardData(text: text))
.then((_) => showSnackBar(context, 'Copied to clipboard'))
.catchError((Object error) => showSnackBar(context, 'Error $error'));
}

无效,然后catchError
void copyToClipboard(BuildContext context, String text) {
Clipboard.setData(ClipboardData(text: text))
.then((_) => showSnackBar(context, 'Copied to clipboard'))
.catchError((Object error) => showSnackBar(context, 'Error $error'));
}

所有方法都有效。如果我使用 thencatchError,是否还需要将代码包装在 async函数中?

推荐哪种方法?

最佳答案

首先,async/awaitthen的概念基本相同。许多人说async/await是处理Promises的更优雅的方式(因为它看起来更加结构化)。两种想法的作用都是:“做某事,一旦完成,就做其他事情”。

关于Future<void> copyToClipboard(BuildContext context, String text) async {...}:
在这里,您将从函数中返回一个Promise。意思是,您可以使用

await copyToClipboard(context,"Text"); 
print("Done");

但是,您还可以返回Promise本身(然后在调用该函数的任何地方进行处理):
Future<void> copyToClipboard(BuildContext context, String text) async {
return Clipboard.setData(ClipboardData(text: text));
}
void somewhereElse() async{
await copyToClipboard(context,"Text"); // (1)
print("Copied"); //Happens after (1)
}

因此,如果您使用的是 then,则会将以下指令放入其调用的相应函数中(如第3个片段所示)。用异步解决第二个代码段看起来像这样:
void copyToClipboard(BuildContext context, String text) async {
await Clipboard.setData(ClipboardData(text: text));// (1)
showSnackBar(context, 'Copied to clipboard')); // (2) This will only be called when (1) has completed
}

如果此指令引发错误,则可以将其包装到try / catch块中:
void copyToClipboard(BuildContext context, String text) async {
try{
await Clipboard.setData(ClipboardData(text: text));// (1)
showSnackBar(context, 'Copied to clipboard')); // (2) This will only be called when (1) has completed
}catch (error) {
print(error.message);
}
}

如果您愿意,那么/ wait或async / await由您决定。我建议异步/等待。请记住,使用async / await时,需要将 async关键字放入函数的签名中,因此调用此函数的函数会意识到,调用它可能需要一段时间并等待它。

关于asynchronous - Future <void>,异步,等待,然后在Flutter/Dart中捕获catchError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60575776/

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