Clean way in GWT/Java to wait for multiple asynchronous events to finish

前端 未结 8 1048
盖世英雄少女心
盖世英雄少女心 2021-01-30 13:32

What is the best way to wait for multiple asynchronous callback functions to finish in Java before continuing. Specifically I\'m using GWT with AsyncCallback, but I think this i

8条回答
  •  逝去的感伤
    2021-01-30 13:49

    I've struggled with this myself, and I've used several methods- the 'chain' one just gets ugly (but can be improved if you create classes instead of inline classes for each method).

    A variant of your own version works well for me:

    int outstandingCalls = 0;
    {
    outstandingCalls++;
     AjaxLoader.loadApi("books", "0", new Runnable(){
        public void run() {
            ready();
        }}, null);
    
    outstandingCalls++;
    AjaxLoader.loadApi("search", "1", new Runnable(){
        public void run() {
            ready();
        }}, null);
    
    
    outstandingCalls++;
    loginService.login(GWT.getHostPageBaseURL(), new AsyncCallback() {
        public void onSuccess(LoginInfo result) {
            ready();
        }
        // Be sure to decrement or otherwise handle the onFailure
    });
    }
    
    private void ready() {
    if (--outstandingCalls > 0) return;
    
    // Everything loaded
    }
    

    All I did was create a counter for the number of calls I'm going to do, then each async result calls ready() (be sure to do this on the failure methods too, unless you're going to do something different)

    In the ready method, I decrement the counter and see if there are still outstanding calls.

    It's still ugly, but it lets you add calls as needed.

提交回复
热议问题