[GWT] 비동기 호출에 익숙해지기
코드를 꼭 순차적으로 실행할 필요없는데.. 그렇게해서 오히려 개발자가 대기 화면을 만들어야 하는 부담이 생긴다.
비동기 RPC를 사용해서 병렬처리를 할 수 있다. 예를 들어, 화면을 그리는데 1초, 데이터를 가져오는데 1초가 걸린다면, 이 두 작업을 병렬로 처리해서 1초 동안 화면을 그릴때 데이터를 가져올 수 있다.
직렬처리
병렬처리
비동기 호출로 실행되는 코드는 블럭처리하지 않는다(non-blocking).
// 이 코드는 RPC를 하기 전에 실행된다.
//
if (startRow == lastStartRow) {
...
}
// RPC 호출 실행, 콜백 메서드를 구현한다:
//
calService.getPeople(startRow, maxRows, new AsyncCallback<Person[]>() {
// RPC가 끝났을 때 실패했다면 이 코드를 실행한다.
public void onFailure(Throwable caught) {
statusLabel.setText("Query failed: " + caught.getMessage());
acceptor.failed(caught);
}
// RPC가 끝났을 때 성공했다면 이 코드를 실행한다.
public void onSuccess(Person[] result) {
lastStartRow = startRow;
lastMaxRows = maxRows;
lastPeople = result;
pushResults(acceptor, startRow, result);
statusLabel.setText("Query reutrned " + result.length + " rows.");
}
});
// 위 코드를 실행하느라 대기하지 않고 위 코드는 바로 반환된다.
// 다음 코드가 RPC 처리 중에 실행될 것이다.
//
statusLabel.setText("Query in progress...");
...