2017-04-03 8 views
0

아래의 Alt 액션 코드에서 addCharacter가 성공한 후 어떻게 getCharacters()를 호출 할 수 있습니까? 기본적으로 데이터베이스에 새 레코드를 저장 한 후 문자 목록을 새로 고칩니다.React Js ALT - 다른 함수의 성공시 함수 호출

getCharacters() { 
    requestPromise('http://localhost:3100/api/characters') 
     .then((res) => { 
     console.log("Getting Characters"); 
     var opdata = JSON.parse(res); 
     this.actions.getCharactersSuccess(opdata.characters); 
     }).catch((err) => { 
     console.log('error:', err); 
     this.actions.getCharactersFail(err) 
     }) 
    } 

    addCharacter(data) { 
    var options = { 
     method: 'POST', 
     uri: 'http://localhost:3100/api/characters/add/', 
     json: true, 
     body: { 
     name: data.charName, 
     allegiance: data.charAllegiance, 
     }, 
    }; 
    requestPromise(options) 
     .then((res) => { 
      // How can I recall getCharacters() from here 
     }).catch((err) => { 
     console.log('error:', err); 
     }) 
    } 

STORE

getCharactersSuccess(res) { 
    this.setState({ 
     characters: res 
    }) 
    } 
+0

확인이 하나, 도움이 될 수 있습니다 http://stackoverflow.com/questions/34370957/bluebird-warning-a-promise-was-created-in-a-handler-but-was-not- returned-from-i –

답변

0

에 의해이 더 나은 것 right.It을 보이지 않는 것을 할 수 있습니다. 당신이 그것을 할 수있는 어떤 방법이든 그냥 return this.getCharacters();을 사면됩니다. 어떤 클래스에서 getCharacters() 함수를 참조하십시오. 놓친 요점은 입니다. 올바른 참조를 선택하는 그리고 약속 범위 내에 약속을 만들 때 오류가 발생하지만 약속 범위에서 아무 것도 반환하지 않습니다. 따라서 을 반환하면이 문제를 해결할 것입니다.

addCharacter(data) { 
    var options = { 
     method: 'POST', 
     uri: 'http://localhost:3100/api/characters/add/', 
     json: true, 
     body: { 
     name: data.charName, 
     allegiance: data.charAllegiance, 
     }, 
    }; 
    requestPromise(options) 
     .then((res) => { 
     return this.getCharacters(); 
     }).catch((err) => { 
     console.log('error:', err); 
     }) 
    } 
+0

나는 AltJs를 사용하고 있습니다. 이 솔루션을 시도했지만 오류가 발생했습니다 : 핸들러에서 약속이 생성되었지만 반환되지 않았습니다 – James

+0

this.getCharacters(); 앞에 return 키워드를 추가해보십시오. – TRomesh

+0

@James 내 대답과 설명을 편집했습니다 – TRomesh

0

당신은 단지 getCharacters 함수를 호출 할 필요가있다. 당신은 당신이 플럭스 REDUX 같은 어떤 아키텍처를 사용하는 경우 this.getCharacters()

addCharacter(data) { 
    var options = { 
     method: 'POST', 
     uri: 'http://localhost:3100/api/characters/add/', 
     json: true, 
     body: { 
     name: data.charName, 
     allegiance: data.charAllegiance, 
     }, 
    }; 
    requestPromise(options) 
     .then((res) => { 
     return this.getCharacters(); 
     }).catch((err) => { 
     console.log('error:', err); 
     }) 
    } 
+0

이 시도했지만 오류가 발생했습니다 : 약속을 처리기에서 만든 있지만 그것을 반환하지 않았습니다. – James

+0

경고가 아닌 오류 메시지가 나타납니다. 'return this.getCharacters()'를 추가 할 필요가 있습니다. – juancab

+0

@James 왜 그런 편집이 필요합니까? –