비동기식 애플리케이션 (특히 모든 데이터가 JS를 통해 을 획득해야하는 OpenSocial 코드를 다룰 때)을 처리해야 할 때 Javascript에서 많은 스파게티를 작성하고 있음을 알고 있습니다. . 일반적인 패턴은 다음과 같습니다.자바 스크립트에서 스파게티 코드를 피하는 방법
- 사용자가 응용 프로그램에 처음 로그인하면 데이터를 가져옵니다.
- 자신의 데이터에서 A를 수행합니다 (예 : 서버에 요청을 보내 친구를 사귀십시오).
- 이 데이터에서 B를 수행합니다 (예 : 일부 처리를 위해 친구를 서버로 보냄).
- 데이터에서 C를 실행합니다 (예 : 서버 응답이 유효한지 확인하여 다른 작업을 수행 할 수 있음).
이 순차 실행 경로 (1 => 2 => 3 => 4)는 비동기식 모드와 잘 맞지 않습니다. 자연의 아약스 그래서 사용자가 오랜 시간 동안 기다리고 끝내고 코드는 모든 단계 이후 엉망으로 바뀝니다 이전 것들에 따라 달라집니다.
코드 예 :
gadgets.util.registerOnLoadHandler(setupUser())
...
function setupUser() {
var req = [get data and setup request]
req.send(some_url, some_data, function(response) { getFriendsFor(response.user) });
}
function getFriendsFor(user) {
var friends = [get friends from user]
var req = [setup request]
req.send(some_other_url, some_other_data, function(response { validateFriendsResponse(response.friends) });
}
function validateFriendsResponse(friends) {
if (friends.valid())
...
loadCanvas();
}
당신은 각 기능은 이전에 따라 볼 수 있고, 더 나쁜 것, 그것은 도움이 될 수있는 특정 순서 호출해야합니다. 사용자가 기다리는 동안 화면 및 다른 특수 효과를 표시/숨기기와 같은 항목을 추가해야 할 때 상황이 악화됩니다.
어떻게 수정 하시겠습니까?
알 요리가 될 때까지 요리하십시오. –
주된 걱정은 사용자가이 모든 작업을 완료하기 위해 오랜 시간 동안 기다리는 것 같습니다.각 요청이 반환 된 후 사용자에게 어떤 피드백을 보내어 왜 어떤 일이 일어나고 있는지 알 수 있습니다. 3 단계 진행률 표시 줄이나 사용자에게 무슨 일이 일어나는지 알려주는 메시지처럼 간단 할 수 있습니다. (당신은 심지어 aeal에 대한 "망상 스플라인 (reticulating splines)"메시지를 던질 수 있습니다.) –
Sam : 팔을 치고있는 귀여운 로봇으로 화면을로드 중입니다.하지만 코드는 나도 걱정합니다. 두 달 후에 그것을 읽는 데 문제가 있습니다. –