让我们说下面的代码,然后在usersaApi.getUsersId
函数中调用函数useEffect
,我是否必须做出响应(因为它返回值,而不是Promise)一个异步功能?
const usersApi = {
getUserIds: async storyId => {
const result = await axios
.get(`${users + userId}.json`)
.then(({ data }) => data);
return result;
},
}
useEffect(() => {
const fetchData = async () => {
await usersApi.getUserIds().then(data => setUserIds(data));
};
fetchData();
}, []);
使用之间还有什么区别?
const fetchData = async () => {
await usersApi.getUserIds().then(data => setUserIds(data));
};
vs。
const fetchData = async () => {
const result = await usersApi.getUserIds().then(data => setUserIds(data));
return result;
};
我想我可以等待响应而不返回结果,对不对?这里有两个问题:
1)我是否必须在已经异步/等待的函数上使用异步/等待 2)在已经返回数据而不是promise的函数上使用await和return之间的区别。
答案 0 :(得分:1)
1)我是否必须在已经异步/等待的函数上使用异步/等待
由您决定要使用哪种语法。您可以使用async / await,也可以使用较旧的.then
样式。我个人觉得异步等待样式更容易理解,所以我个人更喜欢它。但是,我建议反对混合使用两种语法。几乎从来没有必要这样做,而这最终会使代码更难以理解。要么写:
const fetchData = async () => {
const data = await userApi.getUserIds();
setUserIds(data);
}
或:
const fetchData = () => {
userApi.getUserIds.then(data => setUserIds(data));
}
2)在已经返回数据而非承诺的函数上使用等待和返回之间的区别。
存在异步/等待以简化使用诺言的语法。如果您不使用诺言,则不需要异步/等待。