web-dev-qa-db-fra.com

Utilisation asynchrone et wait avec export const

Je ne peux pas faire ce travail ... il est dit: attendre est un mot réservé. Oui, bien sûr que c'est ... et j'aimerais utiliser :) 

Qu'est-ce qui ne va pas ?

export const loginWithToken = async () => {
  return dispatch => {
    dispatch({type: SESSION_LOGIN_IN_PROGRESS, payload: true})
    let storedData = await ReadFromLocalDB('user')
    console.log(storedData)
    if (!storedData) {
        invalidToken(null, dispatch)
    }
    else {
        storedData = JSON.parse(storedData)
        SessionLoginWithToken(storedData.session.token).then(res => {
            console.log(res)
            loginSuccessfully(res, dispatch, true)
        })
    }
  }
}

Mon ReadFromLocalDB est la suivante:

export const ReadFromLocalDB = async (key) => {
   return AsyncStorage.getItem(key)
}

c'est rendre une promesse

3
Marco Jr

return dispatch => {...} doit également être async Je crois. À l'heure actuelle, seule la fonction de niveau supérieur est async, pas celle imbriquée.

// This function is async
export const loginWithToken = async () => {
  // This one is not though which means it can't use await inside
  // return dispatch => {

  // Instead it should likely be:
  return async dispatch => {
    dispatch({type: SESSION_LOGIN_IN_PROGRESS, payload: true})
    let storedData = await ReadFromLocalDB('user')
    console.log(storedData)
    if (!storedData) {
        invalidToken(null, dispatch)
    }
    else {
        storedData = JSON.parse(storedData)
        SessionLoginWithToken(storedData.session.token).then(res => {
            console.log(res)
            loginSuccessfully(res, dispatch, true)
        })
    }
  }
}
5
zero298

On dirait que c'est parce que la fonction que vous retournez (dispatch => {...}) n'est pas une fonction asynchrone, vous ne pouvez donc pas utiliser await dans celle-ci. Vous devez faire quelque chose comme return async dispatch => {...}

1
Robert Herhold

Avec exportation et importation, il est suggéré de suivre le modèle suivant:

Pour définir et exporter une fonction dans le fichier myFile.js:

export const request = async (arg1, arg2) => {
  try {
    const response = await fetch('https://api.com/values/?arg1=' + arg1 + '&arg2=' arg2);
    const json = await response.json();
    console.log(json);
  }
  catch (e) {
    console.log('We have the error', e);
  }
}

Pour importer et appliquer la fonction:

import {request} from './myFile'

request();
0
Roman