Dart 如何从内部函数/流侦听器中返回函数值?

Dart 如何从内部函数/流侦听器中返回函数值?,dart,indexeddb,dart-async,Dart,Indexeddb,Dart Async,我正在dart中编写一个函数,该函数将从浏览器端索引数据库中删除一个对象,这时我发现我必须从内部函数中返回一个外部函数值: Future delete(){ 事务tx=db.transactionStore(storeName,“读写”); ObjectStore os=tx.ObjectStore(storeName); os.delete(_key);//返回空的future,修改tx //这是不正确的,但表明了以下观点: if(tx.onComplete){return true;} 如果

我正在dart中编写一个函数,该函数将从浏览器端索引数据库中删除一个对象,这时我发现我必须从内部函数中返回一个外部函数值:

Future delete(){
事务tx=db.transactionStore(storeName,“读写”);
ObjectStore os=tx.ObjectStore(storeName);
os.delete(_key);//返回空的future,修改tx
//这是不正确的,但表明了以下观点:
if(tx.onComplete){return true;}
如果(tx.onError){返回false;}
}
这个函数是我用来保存并加载到索引数据库的类的方法。 当删除操作成功或失败时,我希望此函数返回
true
false
,或返回包含相同内容的未来对象。然而,瓶颈是
os.delete(_键)语句:返回未来,但删除操作的实际成功或失败由
tx.onComplete
tx.onError
提供。这两个对象都是流,因此我需要创建匿名函数来处理来自它们的事件:

tx.onComplete.listen((e){
返回到外部函数(真);
});
tx.onError.listen((e){
返回到外部函数(false);
});
返回到外部函数(bool){
return bool;//不起作用
}
如您所见,当我创建匿名函数时,return语句不再完成方法,而是完成内部函数。我可以让内部函数调用其他函数,但是其他函数有自己的返回语句,不会将结果返回给整个方法

我尝试了设置临时变量并定期检查它们的方法,但这是一个非常不雅观的解决方案,我不想使用它,不仅仅是为了潜在的bug,而是因为它会占用单线程事件循环


是否可以从内部函数向外部函数返回值?或者是否有其他更好的方法从一组流中是否存在事件中获取值?或者是否有其他使用IndexedDB的方法可以避免此问题?

您可以使用
补全符来解决此问题

Future delete(){
Completer Completer=新的Completer();
事务tx=db.transactionStore(storeName,“读写”);
ObjectStore os=tx.ObjectStore(storeName);
tx.onError.first((e){
//返回到外部函数(false);
完成符。完成(假);
});
tx.onComplete.first(布尔){
//return bool;//不起作用
completer.complete(真)
}
os.delete(_key);//注册侦听器,然后执行delete以保存
返回completer.future;
}
那你就这样称呼它吧

delete()。然后((成功)=>print('successed:$success');
另见