javascript - 如何使 Javascript/React/Typescript 提取调用异步?

标签 javascript reactjs async-await fetch-api

考虑以下 Javascript/React 代码:

// Javascript function that has a fetch call in it. 
export const signIn = (email:string, password:string) => {
  console.log("FETCHING...");

  fetch(`${endPoint}/sign_in`, {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      email,
      password
    })
  })
  .then((response) => {
    return response.json()
  })
  .then(({ data }) => {
    console.log("FETCHED DATA...")
  })
  .catch((error) => {
    console.error('ERROR: ', error)
  })

  console.log("DONE FETCHING...");
}

// A functional component that references signIn.
export const SignIn: React.FC<Props> = () => {
  // irrelevant code ...

  const onSubmit = (e: CustomFormEvent) => {
    e.preventDefault()
    console.log("SIGNING IN...")
    // calls my signIn function from above
    // I don't want this to finish until the fetch inside it does.
    signIn(email, password, setAuthentication, setCurrentUser)
    console.log("SIGNED IN...");
  }

  return <>A form here submits and calls onSubmit</>
}

这会产生以下控制台日志输出:

SIGNING IN...
FETCHING...
DONE FETCHING...
SIGNED IN...
FETCHED DATA...

我希望 FETCHED DATA...DONE FETCHING... 之前显示。我试过使用 aysnc/await 但它不起作用,所以我不知道从这里去哪里。

最佳答案

只需添加另一个 .then

  .then((response) => {
    return response.json()
  })
  .then(({ data }) => {
    console.log("FETCHED DATA...")
    return
  }).then(()=> {
      console.log("DONE FETCHING...");
  })
  .catch((error) => {
    console.error('ERROR: ', error)
  })

关于javascript - 如何使 Javascript/React/Typescript 提取调用异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59109737/

相关文章:

javascript - Mongoose findById 的异步/等待行为

javascript - 使用 Promise.all 等待没有生效

javascript - AngularJS 通过 localhost 向 ExpressJS 发出请求

javascript - Ant Design 重置选择

javascript - AngularJS Controller 未执行

javascript - 使用 onClick 和 React 调用句柄函数

javascript - Firebase 未捕获错误(离线推送 json 时)

c# - httpclient 的 async wait 执行顺序问题

javascript - 动态变量名称语法

javascript - gmaps4rails - 将标记拖放到新位置