Javascript 使用.then()嵌套异步函数
在一段时间后重新访问web开发人员,我想在不使用旧的回调地狱范例的情况下将异步函数链接在一起 因此,我的React应用程序中有一个登录组件,带有onFinish函数(使用AntD): 我有一个与API连接的服务层:Javascript 使用.then()嵌套异步函数,javascript,reactjs,asynchronous,callback,antd,Javascript,Reactjs,Asynchronous,Callback,Antd,在一段时间后重新访问web开发人员,我想在不使用旧的回调地狱范例的情况下将异步函数链接在一起 因此,我的React应用程序中有一个登录组件,带有onFinish函数(使用AntD): 我有一个与API连接的服务层: //In userService.js async function getUser(req) { console.log(req); axios .get("/api/user", {params: {email: req.email, password: req.
//In userService.js
async function getUser(req) {
console.log(req);
axios
.get("/api/user", {params: {email: req.email, password: req.password}
})
.then((res) => {
if (res.data) {
console.log('we have data');
return res.data;
} else {
console.log('no data');
return res.data;
}
})
.catch((err) => console.log(err));
}
我希望在进入onFinish()
函数中的.then()
之前完成userService.getUser(req)
中的两个控制台日志。当我测试无效登录时,我的控制台输出为
Object { email: "XX@XX.com", password: "XX" } user.service.js:27
complete undefined login.component.js:22
no data user.service.js:36
对我遗漏的东西有什么指导吗?我还想知道我把最后一个第三个函数放在哪里,这个函数是在用户服务之后运行的。getUser(req)已经完成,但需要将其输出返回到
onFinish()
有两件事,你需要知道
首先,您需要从getUser函数返回请求
其次,如果您在别处捕获错误,则不需要捕获用户请求
此外,由于承诺是可链接的,因此您可以在getUser的.then中调用saveJWTToken(user)
//In userService.js
function getUser(req) {
return axios
.get("/api/user", {params: {email: req.email, password: req.password}
})
.then((res) => {
if (res.data) {
console.log('we have data');
return res.data;
} else {
console.log('no data');
return res.data;
}
}).then(() => {
const token = saveJWTToken(user);
return {user, token}
})
}
有两件事你需要知道 首先,您需要从getUser函数返回请求 其次,如果您在别处捕获错误,则不需要捕获用户请求 此外,由于承诺是可链接的,因此您可以在getUser的.then中调用
saveJWTToken(user)
//In userService.js
function getUser(req) {
return axios
.get("/api/user", {params: {email: req.email, password: req.password}
})
.then((res) => {
if (res.data) {
console.log('we have data');
return res.data;
} else {
console.log('no data');
return res.data;
}
}).then(() => {
const token = saveJWTToken(user);
return {user, token}
})
}
在onFinish中返回承诺是否有帮助
return userService.getUser(req)…
return axios.get(“/api/user”非常感谢大家。有第一个return userService.getUser(req)
,但从来没有第二个。非常感谢在完成帮助中返回承诺吗?return userService.getUser(req)
还有return axios.get(“/api/user”
非常感谢。第一个返回userService.getUser(req)
,在一个点上,但从来没有在第二个点上。非常感谢非常酷的感谢!如果我们有两个,只需一次后续操作。然后()
调用getUser()
,使用两个单独的返回函数,哪个值返回到初始的onFinish()
?@AlexChumbley每个调用的返回值。然后调用返回到下一个调用。非常感谢!如果我们有两个,只需进行一次后续操作。然后()
使用两个单独的返回函数调用getUser()
,哪个值返回到初始的onFinish()
?@AlexChumbley每个调用的返回值。然后调用返回到下一个调用