2017-11-02 9 views
0

내 액션 작성자에 다음 코드가 있습니다.이 코드는 감속기 - "subData"에서 볼 수 있습니다 : [{}, {}, {}}} - 프린트 할 때 동작합니다 실제로 약속입니다 - 그때를 사용하여 변환을 시도했지만 운이 .. 하루 종일 고투하고있다 ... 어떤 아이디어?디스패치 후 감속기의 빈 객체

export function getMainData() { 
    return async function getMainData(dispatch) { 
    const { data } = await getMainDataAPI(); 
    const subData = data.map((item) => { 
     const endpoint = 'build with item.name'; 
     return Request.get(endpoint); 
    }); 
    console.log('subddd' + subData); prints -> **[object Promise],[object Promise],[object Promise]** 
    dispatch({ 
     type: GET_DATA_AND_SUBDATA, 
     payload: { data, subData } 
    }); 
    }; 
} 

async function getMainDataAPI() { 
    const endpoint = 'url'; 
    return Request.get(endpoint); 
} 
+0

[reducer.state.props의 중첩 된 동작이 중첩 된 동작에서 정의되지 않음] (https://stackoverflow.com/questions/47070786/reducer-state-props-is-undefined-in-nested-actions- 반응식 - redux) – ivan

답변

0

이번에는 질문이 더 분명합니다.

귀하의 console.log은 다음 명령으로 가기 전에 API 결과를 기다리지 않았기 때문에 3 개의 약속 객체지도를 표시합니다.

기본적으로 data.map((item) => { 대신 await Promise.all(data.map(async (item) => {을 사용해야합니다. 작업 코드 아래

: 당신이 해결되지 않은 약속의 배열을 파견하는 것처럼

export function getMainData() { 
    return async function getMainData(dispatch) { 
    const { data } = await getMainDataAPI(); 
    const subData = await Promise.all(data.map(async (item) => { 
     const endpoint = 'build with item.name'; 
     return await Request.get(endpoint); 
    })); 
    dispatch({ 
     type: GET_DATA_AND_SUBDATA, 
     payload: { data, subData: subData.data } 
    }); 
    }; 
} 

async function getMainDataAPI() { 
    const endpoint = 'url'; 
    return Request.get(endpoint); 
} 
+0

개체 대신 내 감속기에서 페이로드에 [개체 개체]가 나타납니다 .. – monkeyjs

+0

감속기에서 페이로드를 문자열로 지정할 때 데이터 만 표시됨 - 아니요 SubData - 이번에는 빈 개체도 없습니다 @yuantonito. https://stackoverflow.com/users/4247380/yuantonito – monkeyjs

+0

귀하의 페이로드가 어떻게 보이는지, 귀하의 모든 API 호출이 반환된다는 점을 질문 할 수 있습니까? 왜냐하면'Promise.all'에서 여러분은 3 번 API를 호출하기 때문에 배열을 반환하고 객체는 반환하지 않을 것입니다. 객체를 원한다면 예상 출력을 제공하면 크게 도움이 될 것입니다. – yuantonito

0

것 같습니다. 나는 그들이 반환 된 결과를 해결하고 파견 할 때까지 기다리려고한다 :

... 
Promise.all(subData).then(results => { 
    dispatch({ 
    type: GET_DATA_AND_SUBDATA, 
    data: { data, subData: results } 
    } 
}); 

행운을 비네!

+0

하지만지도가 있습니다. 여기에 디스패치하면 3 회 (배열의 크기에 따라 다름)를 파견합니다. 기존 설정은 가능합니까? – monkeyjs