异步操作完成后从函数返回

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
      }

   });

希望这对您有所帮助!