DART:未来的语法,然后[英] DART: syntax of future then

本文是小编为大家收集整理的关于DART:未来的语法,然后的处理方法,想解了DART:未来的语法,然后的问题怎么解决?DART:未来的语法,然后问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我不了解then()子句的语法.

1. myFuture(6).then( (erg) => print(erg) )

(erg) => expr句法是什么?

我可能是一个功能,但是

then( callHandler2(erg)

不起作用,错误:

"Multiple markers at this line
- The argument type 'void' cannot be assigned to the parameter type '(String) -> 
 dynamic'
- Undefined name 'erg'
- Expected to find ')'"

2. myFuture(5).then( (erg) { callHandler(erg);}, onError: (e) => print (e)

What´s `onError: (e) => expr"` syntactically?

3. onError:和.catchError(e)变体之间有区别

推荐答案

1) fat箭头是短匿名函数的句法糖.以下两个功能相同:

someFuture(arg).then((erg) => print(erg));
// is the same as
someFuture(arg).then((erg) { return print(erg); });

基本上脂肪箭基本上自动返回下一个表达式的评估.

如果您的callHandler2具有正确的签名,则只需传递函数名称即可.签名是它接受参数的数量,因为未来将传递给then子句,并返回null/void.

例如,以下将有效:

void callHandler2(someArg) { ... }
// .. elsewhere in the code
someFuture(arg).then(callHandler);

2)请参见答案1). 脂肪箭只是句法糖等效于:

myFuture(5).then( (erg){ callHandler(erg);}, onError: (e){ print(e); });

3)catchError允许您在一系列期货之后链接错误处理.首先,重要的是要了解then可以链接then,因此可以将返回Future的then呼叫链接到另一个then呼叫. catchError会从链中所有Future中捕获同步和异步的错误.传递onError参数只会处理Future中的错误,其参数和then块中的任何同步代码的参数.您的then块中的任何异步代码都将保持未见.

大多数飞镖代码的最新趋势是使用catchError并省略onError参数.

其他推荐答案

我将尝试更多地详细说明Matt的回答,希望提供更多的见解.

then()需要什么是函数(回调),其签名与未来的类型匹配.

例如,给定A Future<String> myFuture和doSomething作为接受A String输入的任何函数,您可以调用myFuture.then(doSomething).现在,有几种方法可以定义一个在DART中采用String的函数:

Function(String) doSomething1 = (str) => /* do something with str */  // only one command
Function(String) doSomething2 = (str) { /* do something with str */ } // several commands
Function(String) doSomething3 = myFunction;
myFunction(String) { // Dart will auto imply return type here
  /* do something with str */ // several commands
}

这三个函数定义中的任何一个(=的右侧)都可以进入then()内部.前两个定义称为 lambda函数,它们是在运行时创建的,除非您手动复制代码,否则不能重复使用. lambda函数可能会产生类似语言的表达式,即(connection) => connection.connect().第三种方法允许重复使用该功能. lambda函数在许多语言中很常见,您可以在此处阅读更多有关它的信息: https://medium.com/@chinekethineketobenna/lambda-expressions-vs-vs-manonymous-functions-in-javascript-3aa760c958ae .

您不能将callHandler2(erg)放入then()内的原因是callHandler2(erg)使用了不确定的变量erg.使用lambda函数,您将能够告诉then() erg in callHandler2(erg)是未来的输出,因此它知道可以从哪里获得erg value.

本文地址:https://www.itbaoku.cn/post/1793891.html