Sophie가 비동기 데이터를 처리 할 때 this fluxxor example에서 설명한 것에 대한 구현을 참조하십시오. 부정적인 점은이 접근법에 따르면 각 사용자 상호 작용에는 세 가지 동작 (트리거, 성공 및 실패)이 필요하지만 모든 사용자 상호 작용에 이러한 낙관적 인 접근 방식이 필요하지는 않습니다.
중요한 부분은 액션에 있습니다
loadBuzz: function() {
this.dispatch(constants.LOAD_BUZZ);
BuzzwordClient.load(function(words) {
this.dispatch(constants.LOAD_BUZZ_SUCCESS, {words: words});
}.bind(this), function(error) {
this.dispatch(constants.LOAD_BUZZ_FAIL, {error: error});
}.bind(this));
},
BinaryMuse (fluxxor 창조자)는 LOAD_BUZZ 조치를 전달하고 성공 비동기 요청을 트리거 및 기능을 실패 여기서 성공을 전달하거나 조치를 실패합니다. 상점은 낙관적 인 업데이트를 위해 LOAD_BUZZ 작업을 청취하거나 svg 로딩 아이콘을 표시 한 다음 성공 또는 오류의 최종 알림 (스토어에 BUZZWORD 저장)에 대한 성공 및 오류 동작을 수신 할 수 있습니다.
onLoadBuzz: function() {
this.loading = true;
this.emit("change");
},
onLoadBuzzSuccess: function(payload) {
this.loading = false;
this.error = null;
this.words = payload.words.reduce(function(acc, word) {
var clientId = _.uniqueId();
acc[clientId] = {id: clientId, word: word, status: "OK"};
return acc;
}, {});
this.emit("change");
},
나는이 더 서버에 동기 요청 및 영향을받는 페이지의 응답처럼 때문에 아약스 요청이 파견되는 작용을 차단해서는 안 소피처럼 생각합니다.
업데이트가 실패하고 서버가 표시하려는 오류 메시지를 반환한다고 가정합니다. TODO_UPDATE_FAILED 핸들러에서 수행 할 작업에 오류 메시지를 저장 하시겠습니까? – scttnlsn
@scttnlsn 오류 메시지를 TodoStore에 저장해야하는지 스스로 물어볼 필요가 있습니다. 그렇지 않은 경우 제안 사항으로, 오류 메시지를 처리하는 구성 요소 (예 : 경고 메시지 구성 요소)가 사용하는 오류 메시지 용 별도의 데이터 저장소를 만들어야합니다. – Spoike
여러 작업으로 하나의 작업을 깨는 것은 일을 망칠 수 있습니다. 두 개 이상의 작업이 서로 얽히게되면이를 피하는 것이 가장 좋습니다. –