【问题标题】:Cant get async and await to work correctly无法获得异步并等待正常工作
【发布时间】:2019-11-03 13:53:11
【问题描述】:

我正在尝试创建登录/创建帐户屏幕,但我无法让我的异步正常工作。等待不工作我的控制台在调用 authToken 后立即打印出未定义,然后打印“关于调用 saveUserToken”。

我在点击创建帐户按钮后调用它。

async createUser() { 
        if ((this.state.email != "" && this.state.fname != "" && this.state.lname != "" && this.state.password != "" && this.state.confirmPassword != "")) {
            if (this.state.password == this.state.confirmPassword) {

                const authToken = await QueryHandler.createUser(this.state.email, this.state.password, this.state.fname, this.state.lname);
                console.log(authToken);

                console.log('About to call saveUserToken');
                const storeToken = await SecureDataStorage.saveUserToken(authToken);
                console.log(storeToken);

                ToastHandler.displayNormalMessage('Stored Token');
                const t = await SecureDataStorage.getUserToken();
                console.log('Got from SecureStorage:' + t)
                if(r) {
                    //Succesful result...
                    ToastHandler.displayNormalMessage('Account Created!');
                } else {
                    //Error...
                    ToastHandler.displayErrorMessage('Could not Create Account');
                }

                //Then navigate to login screen...

            } else {
                ToastHandler.displayErrorMessage('Passwords do not Match')
            }
        } else {
            ToastHandler.displayErrorMessage('Please Fill in all Fields');
        }
    }

This is my create user method.

static createUser(e, p, f, l) {
    result = '';
    axios.post((GRAPHQL_END_POINT), {
      query: print(Queries.CREATE_USER),
      variables: {
        firstName: f,
        lastName: l,
        email: e,
        password: p
      }
    })
      .then(res => {
        this.result = res.data.data.createUser.jwt;
        console.log(this.result);
        return true;
        // console.log(this.result);
      })
      .catch(err => {
        console.log(err)
        return false;
      })
      // return this.result;
  }

【问题讨论】:

    标签: react-native async-await axios


    【解决方案1】:

    您应该尝试使 createUser 异步,这样您就不会将 Promise 与异步语法混为一谈。

        async createUser(e, p, f, l) {
        const res = await axios.post((GRAPHQL_END_POINT), {
          query: print(Queries.CREATE_USER),
          variables: {
            firstName: f,
            lastName: l,
            email: e,
            password: p
          }
        })
        console.log('res', res)
        return res.data.data.createUser.jwt;
      }
    

    【讨论】:

    • 我得到与其他答案相同的错误。我无法建造。我不认为它喜欢调用其他异步函数的异步函数。我想我需要用 Promise 做一些事情,但我不知道如何写。
    【解决方案2】:

    问题可能出在saveUserToken()。如果是异步的,请确保它在返回之前等待结果。

    【讨论】:

    • saveUserToken 目前不是异步的,但我认为应该是。每当我使它异步时,我都无法构建应用程序并获得带有意外令牌的 SyntaxError。
    • saveUserToken 的预期回报是多少?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多