React Native 调用异步函数并在另一个异步函数中使用 return
React Native Calling async function and use return in another async function
我正在使用 React Native,我必须在挂载 (useEffect) 之前调用 2 个 Redux thunk。第一个是获取用户位置。第二个给了我那个位置附近的动物列表。
这是位置 Thunk(useLocation 是自定义挂钩):
export const getLocation = () => async (dispatch) => {
await useLocation()
.then((res) => {
dispatch(getLocationSuccess(res));
})
.catch((err) => {
console.log(err, "ERROR");
});
};
这非常有效。
这是动物的声音:
export const getAnimals = (data) => async (dispatch) => {
await api.animals
.list(data)
.then((res) => {
dispatch(getLostsSuccess(res.data));
})
.catch((err) => {
console.log(err)
});
};
这是 Api 帮手:
从“axios”导入 axios;
const requestHelper = axios.create({
baseURL: "http://192.168.0.15:8000/api/",
headers: {
"Content-Type": "application/json",
},
});
const routes = {
animals: {
list: (data) =>
requestHelper({
data,
method: "post",
url: "animals/list/",
}),
};
export default routes;
这是组件(useEffect 和 async):
useEffect(() => {
asyncEffect()
}, []);
const asyncEffect = async () => {
const location = await getLocation();
getAnimals({ location: location, status: 1 });
};
“位置”在 getAnimals thunk 中作为空对象发送,但状态加载正常。如何在 getLocation returns 之后使用 getAnimals thunk?
getLocation
redux-action 不是等待的常规异步函数...它是 return 函数...
的函数
所以我建议你在 getLocation
redux 动作
中成功获取位置后获取动物列表
export const getLocation = () => async (dispatch) => {
await useLocation()
.then((res) => {
dispatch(getLocationSuccess(res));
/**
* call getAnimals here // <<--
*/
})
.catch((err) => {
console.log(err, "ERROR");
});
};
const asyncEffect = async () => {
const location = await getLocation();
// getAnimals({ location: location, status: 1 });
};
如果你想调用一次getAnimals
/** Executes only on app-mount */
useEffect(() => {
getLocation();
}, []);
useEffect(() => {
if (location) {
// get animals here
getAnimals({ location: location, status: 1 });
}
}, [location]); // location is pulled from redux-store using mapStateToProps
我正在使用 React Native,我必须在挂载 (useEffect) 之前调用 2 个 Redux thunk。第一个是获取用户位置。第二个给了我那个位置附近的动物列表。
这是位置 Thunk(useLocation 是自定义挂钩):
export const getLocation = () => async (dispatch) => {
await useLocation()
.then((res) => {
dispatch(getLocationSuccess(res));
})
.catch((err) => {
console.log(err, "ERROR");
});
};
这非常有效。
这是动物的声音:
export const getAnimals = (data) => async (dispatch) => {
await api.animals
.list(data)
.then((res) => {
dispatch(getLostsSuccess(res.data));
})
.catch((err) => {
console.log(err)
});
};
这是 Api 帮手:
从“axios”导入 axios;
const requestHelper = axios.create({
baseURL: "http://192.168.0.15:8000/api/",
headers: {
"Content-Type": "application/json",
},
});
const routes = {
animals: {
list: (data) =>
requestHelper({
data,
method: "post",
url: "animals/list/",
}),
};
export default routes;
这是组件(useEffect 和 async):
useEffect(() => {
asyncEffect()
}, []);
const asyncEffect = async () => {
const location = await getLocation();
getAnimals({ location: location, status: 1 });
};
“位置”在 getAnimals thunk 中作为空对象发送,但状态加载正常。如何在 getLocation returns 之后使用 getAnimals thunk?
getLocation
redux-action 不是等待的常规异步函数...它是 return 函数...
所以我建议你在 getLocation
redux 动作
export const getLocation = () => async (dispatch) => {
await useLocation()
.then((res) => {
dispatch(getLocationSuccess(res));
/**
* call getAnimals here // <<--
*/
})
.catch((err) => {
console.log(err, "ERROR");
});
};
const asyncEffect = async () => {
const location = await getLocation();
// getAnimals({ location: location, status: 1 });
};
如果你想调用一次getAnimals
/** Executes only on app-mount */
useEffect(() => {
getLocation();
}, []);
useEffect(() => {
if (location) {
// get animals here
getAnimals({ location: location, status: 1 });
}
}, [location]); // location is pulled from redux-store using mapStateToProps