javascript - 在上一个函数完成后立即执行函数(在获取中)

标签 javascript reactjs asynchronous react-native fetch

如何在第二个函数完成后立即调用函数。我有这个代码:

import { handleTokenExpiration }  from '../../utils/tokenExpiration'

handleClick(){
    fetch(someURL, {
      method: "PUT",
      headers: {
        Authorization: `Bearer${token}`,
      },
      body: JSON.stringify({
        note: this.state.text,
      })
    })
    .then((response) => response.json()) 
    .then((responseData) => {
      if (responseData.success) {
        Alert.alert(
          'Thanks!',
          [
            {text: 'OK'}
          ],
          { cancelable: false }
        )
      }
      else{
        if(responseData.mvMessages[0].message === "your token is expired"){
          handleTokenExpiration(this.props.token)
          this.handleClick()
        }
        else{
          switch (responseData.mvMessages[0].key) {
            case 'note':
            this.setState({
              userNoteError: responseData.mvMessages[0].message,
            })
              break;
            case 'note2':
            this.setState({
              userInputError: responseData.mvMessages[0].message,
            })
              break;
            default:
            this.setState({
              userLastError: responseData.mvMessages[0].message,
            })
          }
        }
      }
    })
    .catch(error => {
       console.log(error)
    })
  }

基本上,当 token 过期时,应该调用这两个函数。 handleTokenExpiration(this.props)this.handleClick()

第一个函数处理 token 过期,第二个函数调用相同的函数(带有有效 token )。这是可行的,但问题是由于异步行为,这两个函数都被调用了几次。

如何才能等待handleTokenExpiration(this.props)完成然后运行this.handleClick()

类似于我们想要在 setState 完成后立即运行一个函数:

this.setState({
  FirstName: this.props.firstName
}, () => this.calledRightAfterSetStateisFinished())

但在这种情况下,函数一个接着一个。

最佳答案

嗯,有什么问题:

handleTokenExpiration(this.props.token, () => {
  this.handleClick();
});

handleTokenExpiration中你有:

export default function handleTokenExpiration(token, callback) {
 // ... do whatever you need to do
 callback();
}

关于javascript - 在上一个函数完成后立即执行函数(在获取中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48445091/

相关文章:

javascript - 尽管我确实将 jQuery 添加到了 HTML 文件中,但是 fadeIn 并不是一个函数

c++ - 异步 winsock 服务器包装器,CPU 滞后 - C++

javascript - "Listening"到来自 Capybara/Selenium 的 AJAX 调用 - Rails

javascript - Angularjs - 禁用和取消选中复选框

javascript - jQuery AutoNumeric 不格式化多个字段

node.js - webpack 编译时内存不足

javascript - React Router 中的中间 URL 参数

reactjs - React Semantic UI - 将图标放置在菜单项中文本的左侧

javascript - 了解 Javascript 异步调用

c# - 如何在 View 模型中调用异步方法