如何使用导入异步功能?

How use import async function?

我制作了一个带有一些 Utils 函数的 Storage.js 文件。大多数情况下,我是这样使用的:

async someFunction()=>{ let foo = await getOnDevice(someName)}

但就我而言,语法有问题

import {AsyncStorage} from 'react-native'

export const saveOnDevice = async (name, data) => {
 try {
  if (data !== null && data !== undefined) {
   await  AsyncStorage.setItem(name, JSON.stringify(data));
  }
 } catch (error) {
  console.log(error)
 }
};

export const getOnDevice = async (name) => {
 try {
  const data = await AsyncStorage.getItem(name);
  if (data !== null && data !== undefined) {
   return data
  }
 } catch (error) {
  console.log(error)
 }
};

如何在不声明 async 函数的情况下使用它?

import {saveOnDevice} from '../../utils/Storage'
export  function fetchUrlWithRedux(url) {
 return (dispatch) => {
  dispatch(fetchUrlRequest(url));
  return fetchUrl(url, dispatch).then(([response, json]) => {
   if (response.status === 200) {
    saveOnDevice('url', json.data.host);
    dispatch(fetchUrlSuccess(json))
   }
   else {
    dispatch(fetchUrlError())
   }
  }).catch(() => dispatch(fetchUrlError()))
 }
}

我的代码有什么问题?

我认为你需要在传递给 .then() 的匿名函数之前添加 async,并在调用 saveOnDevice() 之前添加 await:

import {saveOnDevice} from '../../utils/Storage'
export  function fetchUrlWithRedux(url) {
    return (dispatch) => {
        dispatch(fetchUrlRequest(url));
        return fetchUrl(url, dispatch).then(async ([response, json]) => {
            if (response.status === 200) {
                await saveOnDevice('url', json.data.host);
                dispatch(fetchUrlSuccess(json))
            }
            else {
                dispatch(fetchUrlError())
            }
        }).catch(() => dispatch(fetchUrlError()))
    }
}

如果您不想在主文件中使用 async/await,那么您可以使用 promise,如下所示。

saveOnDevice('url', json.data.host).then(() => {
  dispatch(fetchUrlSuccess(json))
})