这是我的动作创建者调用 - 有问题 - 我从第一次api调用中获取数据,但是当我通过并尝试再拨几个电话时(在这种情况下为3)它直到返回它调用的地方才到达下一组电话 - 我的代码中的问题是什么?
export function getData() {
return async function getData(dispatch) {
const { data } = await getDataAPI();
dispatch({ type: GET_DATA, payload: data });
Object.keys(data).map(async (keyName, keyIndex) => {
const ENDPOINT = 'build the url with keyName';
getSingleDATA(ENDPOINT);
});
};
}
async function getDataAPI() {
const endpoint = 'url';
return Request.get(endpoint);
}
async function getSingleDATA(ENDPOINT) {
//CODE DOES NOT GO TO THE LINE BELOW
return function dispatchgetSingleDATA(dispatch) {
Request.get(ENDPOINT).then((response) => {
dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response });
});
};
}
答案 0 :(得分:0)
我认为你的getSingleDATA()
函数是curry,并且你没有调用返回的函数(期望你传递它dispatch
)。我认为它应该是这样的:
...
Object.keys(data).map(async (keyName, keyIndex) => {
const ENDPOINT = 'build the url with keyName';
getSingleDATA(ENDPOINT)(dispatch);
});
其次,你甚至需要咖喱吗?在我看来,您可以将getSingleDATA()
函数重写为:
async function getSingleDATA(ENDPOINT, dispatch) {
return Request.get(ENDPOINT).then((response) => {
dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response });
});
}
...然后传入dispatch
作为上面的第二个参数(也看起来getSingleDATA()
期望使用keyIndex
,所以最好也传递它:)
getSingleDATA(ENDPOINT, dispatch); //don't forget keyIndex (not shown)
希望这会有所帮助。祝你好运!