异步操作完成后从函数返回
Returning from a function once an async operation is done
我正在尝试使用现有的 class,其中 return 以回调的形式提供数据。调用是这样的-
class Validator{
validate(){
DataProvider.getInstance(new DataListener(){
@Override
void onDataReady(String data){
//Do something with data
}
});
}
return //data when the above call is finished
}
我想要一种干净的方法来 return 异步调用完成时应该 return 编辑的数据。放置一个 while 循环并检查数据是一种明显但不干净的方法。我可以使用 RxJava 实现吗?
注意:如果调用耗时,validate函数等待是可以的
就个人而言,RxJava 太过分了。您只需要将延续函数作为参数传入即可
class Validator {
void validate(DataListener dl){
DataProvider.getInstance(dl);
}
现在,无论您在哪里调用此方法,都请输入您的 new DataListener
。不要将 validate()
的结果分配给变量
另一种可能的解决方案,如果您不想使用 RxJava,并且只想 return 来自验证方法的值,那么您可以通过创建一个接口来实现:
public interface ResultsListener{
public void onResult(String data);
public void onFailed();
}
public void validate(ResultListener callback){
DataProvider.getInstance(new DataListener(){
@Override
void onDataReady(String data){
//Do something with data
callback.onResult(data);
}
});
}
当您调用 validate() 时,您只需执行以下操作:
validate(new ResultsListener() {
@override
void onResult(String valid) {
// Do something with the returned data
}
@override
void onFailed() {
// something failed
}
});
希望这对您有所帮助!
我正在尝试使用现有的 class,其中 return 以回调的形式提供数据。调用是这样的-
class Validator{
validate(){
DataProvider.getInstance(new DataListener(){
@Override
void onDataReady(String data){
//Do something with data
}
});
}
return //data when the above call is finished
}
我想要一种干净的方法来 return 异步调用完成时应该 return 编辑的数据。放置一个 while 循环并检查数据是一种明显但不干净的方法。我可以使用 RxJava 实现吗?
注意:如果调用耗时,validate函数等待是可以的
就个人而言,RxJava 太过分了。您只需要将延续函数作为参数传入即可
class Validator {
void validate(DataListener dl){
DataProvider.getInstance(dl);
}
现在,无论您在哪里调用此方法,都请输入您的 new DataListener
。不要将 validate()
的结果分配给变量
另一种可能的解决方案,如果您不想使用 RxJava,并且只想 return 来自验证方法的值,那么您可以通过创建一个接口来实现:
public interface ResultsListener{
public void onResult(String data);
public void onFailed();
}
public void validate(ResultListener callback){
DataProvider.getInstance(new DataListener(){
@Override
void onDataReady(String data){
//Do something with data
callback.onResult(data);
}
});
}
当您调用 validate() 时,您只需执行以下操作:
validate(new ResultsListener() {
@override
void onResult(String valid) {
// Do something with the returned data
}
@override
void onFailed() {
// something failed
}
});
希望这对您有所帮助!