Javascript 使用.then()嵌套异步函数

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.

在一段时间后重新访问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.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每个调用的返回值。然后调用返回到下一个调用