Dart 未来序列

Dart 未来序列,dart,dart-async,Dart,Dart Async,在下面的代码中,我认为调用顺序应该是f1>f2>f3,但只调用了f1。如何让3个函数按顺序调用 我已经在main函数中添加了以下内容,它按预期工作,但我想知道是否有其他最终方法可以实现相同的结果 print('Starting main'); 列表期货=新列表(); 未来v1=f1(); 未来v2=f2(); 未来v3=f3(); 添加(v1); 期货.增补(v2); 添加(v3); 未来。等待(未来); 打印(“离开主屏幕”); 导入“dart:async”; 持续时间d1=新的持续时间(秒:

在下面的代码中,我认为调用顺序应该是
f1>f2>f3
,但只调用了
f1
。如何让3个函数按顺序调用

我已经在
main
函数中添加了以下内容,它按预期工作,但我想知道是否有其他最终方法可以实现相同的结果

print('Starting main');
列表期货=新列表();
未来v1=f1();
未来v2=f2();
未来v3=f3();
添加(v1);
期货.增补(v2);
添加(v3);
未来。等待(未来);
打印(“离开主屏幕”);
导入“dart:async”;
持续时间d1=新的持续时间(秒:5);
持续时间d2=新的持续时间(秒:10);
持续时间d3=新的持续时间(秒:15);
布尔r1=假;
布尔r2=假;
boolr3=假;
无效cb1(){
打印(“输入CB1”);
r1=真;
打印(“离开CB1”);
}
无效cb2(){
打印(“输入CB2”);
r2=真;
打印(“离开CB2”);
}
无效cb3(){
打印(“输入CB3”);
r3=真;
打印(“离开CB3”);
}
定时器t1;
定时器t2;
定时器t3;
未来之星1(){
打印(“输入开始1”);
完成符r=新完成符();
r、 未来,然后(){
而(!r1){
}
打印(“完成开始1”);
r、 完整(正确);
});
打印(“离开开始1”);
回归r.未来;
}
未来之星2(){
打印(“输入开始2”);
完成符r=新完成符();
r、 未来,然后(){
而(!r2){
}
打印(“完成开始2”);
r、 完整(正确);
});
打印(“离开开始2”);
回归r.未来;
}
未来之星3(){
打印(“输入start3”);
完成符r=新完成符();
r、 未来,然后(){
而(!r3){
}
打印(“填写开始3”);
r、 完整(正确);
});
打印(“离开start3”);
回归r.未来;
}
未来f1(){
打印(“输入f1”);
完成符结果=新的完成符();
t1=新定时器(d1,cb1);
结果:完成(start1());
打印(“离开f1”);
返回结果。未来;
}
未来f2(){
打印(“输入f2”);
完成符结果=新的完成符();
t2=新定时器(d2,cb2);
结果:完成(start2());
打印(‘离开f2’);
返回结果。未来;
}
未来f3(){
打印(“输入f3”);
完成符结果=新的完成符();
t3=新定时器(d3,cb3);
结果:完成(start3());
打印(“离开f3”);
返回结果。未来;
}
void main(){
打印(“主启动”);
f1()。然后(){
f2(),然后{
f3()。然后(){
});
});
});
打印(“离开主屏幕”);
}

首先,你应该澄清你为什么需要这个。我真的不明白为什么你想让它们按顺序执行——你应该给我们更多关于它背后的概念的信息

请给我们一些你想要完成的更多信息!以下代码以某种方式实现了我认为您需要的功能:

//我对代码做了更多的清理:

导入'dart:async';
持续时间d1=新的持续时间(秒:5);
持续时间d2=新的持续时间(秒:10);
持续时间d3=新的持续时间(秒:15);
未来f1(){
打印(“输入f1”);
完成符r=新完成符();
新定时器(d1,(){
r、 完整(正确);
});
打印(“离开f1”);
回归r.未来;
}
未来f2(){
打印(“输入f2”);
完成符r=新完成符();
新定时器(d2,(){
r、 完整(正确);
});
打印(‘离开f2’);
回归r.未来;
}
未来f3(){
打印(“输入f3”);
完成符r=新完成符();
新定时器(d3,(){
r、 完整(正确);
});
打印(“离开f3”);
回归r.未来;
}
void main(){
打印(“主启动”);
f1()。然后(){
f2(),然后{
f3()。然后(){
});
});
});
打印(“离开主屏幕”);
}

首先,你应该澄清你为什么需要这个。我真的不明白为什么你想让它们按顺序执行——你应该给我们更多关于它背后的概念的信息

请给我们一些你想要完成的更多信息!以下代码以某种方式实现了我认为您需要的功能:

//我对代码做了更多的清理:

导入'dart:async';
持续时间d1=新的持续时间(秒:5);
持续时间d2=新的持续时间(秒:10);
持续时间d3=新的持续时间(秒:15);
未来f1(){
打印(“输入f1”);
完成符r=新完成符();
新定时器(d1,(){
r、 完整(正确);
});
打印(“离开f1”);
回归r.未来;
}
未来f2(){
打印(“输入f2”);
完成符r=新完成符();
新定时器(d2,(){
r、 完整(正确);
});
打印(‘离开f2’);
回归r.未来;
}
未来f3(){
打印(“输入f3”);
完成符r=新完成符();
新定时器(d3,(){
r、 完整(正确);
});
打印(“离开f3”);
回归r.未来;
}
void main(){
打印(“主启动”);
f1()。然后(){
f2(),然后{
f3()。然后(){
});
});
});
打印(“离开主屏幕”);
}

在start1中,您返回一个永远不会完成的未来。基本上,你要做的是:

start1(){
var r=新的完成符();
r、 然后({…r.complete()…});
回归r.未来;
}
由于
r
的唯一完成要求完成
r
,因此不会发生这种情况。 这意味着
f1
结果将永远等待
start1
f1()返回的未来。然后().
将永远无法到达
然后
回调。这就是为什么什么都没有发生

当(!r1){}时,您还有一个繁忙的等待循环
。如果您打算在
r1
不正确时挂起,那么它可以正常工作。在Dart中,未来不会同时执行。您必须在调用任何未来回调之前返回事件循环,因此如果
r1
在到达循环时为false,它将保持false,因为没有其他代码会中断循环

如果我明白你想要什么