Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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
只能调用一次Future/Completer? 请考虑以下代码: 导入'dart:async'; 抽象类抽象类 { 完成者_onEvent1; 完成者_onEvent2; 类摘要() { _onEvent1=新的完成符(); _onEvent2=新的完成符(); } 未来获取事件1 { 回报_onEvent1.未来; } 未来获取事件2 { 回报_onEvent2.未来; } } 类NormalClass扩展了类抽象 { NormalClass():super() { _一个事件1.完成(“事件1上升”); 对于(int-iCounter=0;iCounter_Dart - Fatal编程技术网

只能调用一次Future/Completer? 请考虑以下代码: 导入'dart:async'; 抽象类抽象类 { 完成者_onEvent1; 完成者_onEvent2; 类摘要() { _onEvent1=新的完成符(); _onEvent2=新的完成符(); } 未来获取事件1 { 回报_onEvent1.未来; } 未来获取事件2 { 回报_onEvent2.未来; } } 类NormalClass扩展了类抽象 { NormalClass():super() { _一个事件1.完成(“事件1上升”); 对于(int-iCounter=0;iCounter

只能调用一次Future/Completer? 请考虑以下代码: 导入'dart:async'; 抽象类抽象类 { 完成者_onEvent1; 完成者_onEvent2; 类摘要() { _onEvent1=新的完成符(); _onEvent2=新的完成符(); } 未来获取事件1 { 回报_onEvent1.未来; } 未来获取事件2 { 回报_onEvent2.未来; } } 类NormalClass扩展了类抽象 { NormalClass():super() { _一个事件1.完成(“事件1上升”); 对于(int-iCounter=0;iCounter,dart,Dart,正如您所看到的,这是一个非常简单的代码,它有1个抽象类,定义了2个未来,这2个未来的getter。另一个类实现了这个抽象类,并调用特性来模拟.NET事件系统 问题是,每当我运行此代码时,它都会在for(int iCounter….)行中失败,并出现错误:Future ready complete 这是否意味着我只能完成一次未来?是的,一个完成者只能完成一次未来,这对我来说是最明显的。Future基本上是(read'one')异步操作的令牌。它要么成功,要么失败 在您的案例中,您所寻找的是一个观察

正如您所看到的,这是一个非常简单的代码,它有1个
抽象
类,定义了2个
未来
,这2个
未来
的getter。另一个类实现了这个
抽象
类,并调用
特性
来模拟.NET事件系统

问题是,每当我运行此代码时,它都会在
for(int iCounter….)
行中失败,并出现错误:
Future ready complete


这是否意味着我只能完成一次未来?

是的,一个完成者只能完成一次未来,这对我来说是最明显的。Future基本上是(read'one')异步操作的令牌。它要么成功,要么失败

在您的案例中,您所寻找的是一个观察者模式,其中有一个发送事件的源和侦听器,该侦听器将侦听源上的事件。在此场景中,源可以多次调度同一事件


编辑:我正要添加一些到Streams API的链接,但Alexandre抢先一步。查看更多信息。

就是这样。如果要触发多个值,则必须处理和。有关更多信息,请参阅。

这是正确的。期货是为一次性异步调用设计的。基本上,未来只能提供一种价值。如果希望提供多个值,则需要使用。使用a,您可以轻松添加多个值,然后可以订阅这些值

因此,您的示例如下所示:

导入'dart:async';
抽象类抽象类
{
流量控制器_onEvent1;
流量控制器_onEvent2;
类摘要()
{
_onEvent1=新的StreamController();
_onEvent2=新的StreamController();
}
未来获取事件1
{
返回_onEvent1.stream;
}
未来获取事件2
{
返回_onEvent2.stream;
}
}
类NormalClass扩展了类抽象
{
NormalClass():super()
{
_一个事件1.添加(“事件1上升”);
对于(int-iCounter=0;iCounter<100;iCounter++)
{
_onEvent2.add(i计数器);
}
}
}
可以这样称呼:

main(){
var总和=0;
var thing=new NormalClass();
thing.Event1.监听((myStr)=>print(myStr));
事情。事件2。听((val){
sum+=val;
});
}

代币?这是两个阶段的回调。定义它之后:completer.future,执行它之后:completer.complete()。。。。。我想就是这样。太糟糕了。。我认为它的概念与“事件”非常相似,但它不是——它只是一个回调……我将它称为一个令牌,用于客户端接收未来并在其上注册回调以处理结果和错误。与Flex框架中的AsyncToken类类似:抱歉。。不知道Flex。。。我有背景是的。。我已经发现了这一点:顺便说一句:事件的可观察实现是惊人的