如何使用导入异步功能?

时间:2017-11-21 16:56:00

标签: javascript asynchronous react-native import asyncstorage

我用一些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()))
	}
}




我的代码出了什么问题?

2 个答案:

答案 0 :(得分:0)

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

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()))
    }
}

答案 1 :(得分:0)

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

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