Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart如何看待级联期货?_Dart - Fatal编程技术网

Dart如何看待级联期货?

Dart如何看待级联期货?,dart,Dart,假设我有这门课: void main()异步{ 最后一个示例=ExampleClass(); 等待示例。waitOne(); 等待示例。waitOne(); 打印(“完成”); } 类示例类{ Future waitOne()异步{ 等待未来。延迟(持续时间(秒:1)); 打印(“1秒”); } } 这段代码完全符合我的预期。其输出如下: 1 second 1 second finished 那么我们有这个代码: void main()异步{ 最后一个示例=ExampleClass(); 以

假设我有这门课:

void main()异步{
最后一个示例=ExampleClass();
等待示例。waitOne();
等待示例。waitOne();
打印(“完成”);
}
类示例类{
Future waitOne()异步{
等待未来。延迟(持续时间(秒:1));
打印(“1秒”);
}
}
这段代码完全符合我的预期。其输出如下:

1 second
1 second
finished
那么我们有这个代码:

void main()异步{
最后一个示例=ExampleClass();
以身作则
…waitOne()
…waitOne();
打印(“完成”);
}
此代码现在具有级联运算符(..),并且输出看起来很奇怪:

finished
1 second
1 second
代码跳过两个Future并首先将“finished”打印到控制台,然后同时将“1秒”打印两次(就像Future#wait一样)


为什么Dart会以这种方式工作?

在您的示例中,使用级联运算符添加
await
不会执行任何操作,因为级联运算不会返回任何内容,因此没有等待的未来,然后立即打印
完成的

请记住,级联运算符的结果是原始的您在其上使用它的对象。也就是说,对于
var result=object..x()…y()…z()
result
将被分配
object
的值,而不管
x
y
z
返回什么。忽略由
x()
y()
z()
返回的值。这相当于:

object.x();
object.y();
object.z();
var结果=对象;
您的案例涉及未来
s,与此相同:

final example=ExampleClass();
以身作则
…waitOne()
…waitOne();
因此,您正在执行以下等效操作:

final example=ExampleClass();
示例.waitOne();//返回的未来被忽略。
示例.waitOne();//返回的未来被忽略。
等待示例;//错误地使用非未来的等待。
(请注意,启用s和s线头会发现此错误。)

要正确等待,您不能使用cascade操作符,需要显式地等待各个操作。另请参阅本期文章,其中讨论了可能对语言进行的更改,以支持对成员或级联运算符使用
wait