React Native 中的回调函数定义和调用问题
Callback function definition and Calling issue in react native
朋友,我会拿一个 class 来定义所有功能。现在我们需要一些函数及其回调。所以我定义如下。
回调定义:
export const getStoredData(key: string, callback?: ?(error: ?Error, result: ?string)) =>{
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
return value
}
} catch (error) {
return error
}
}
调用函数如下:
getStoredData('apple' , (error , result) =>{
if (error) {
console.log('error is = ', error);
} else {
console.log('result is = ', result);
}
});
但是我在定义函数意外标记时出错。
请帮助我。
您的语法错误,因为您没有按照您的意愿导出函数。尝试分配您的常量并正确关闭括号:
export const getStoredData = (key, callback) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
return value
}
} catch (error) {
return error
}
};
getStoredData('apple', (error, result) => {
//do stuff
});
你错误地使用了箭头函数,你忘记了 =
,意外的标记是因为这里 =>
:
export const getStoredData(key: string, callback?: ?(error: ?Error, result: ?string)) => {
....
}
要么这样写(getStoredData后注意=
):
export const getStoredData = (key: string, callback?: ?(error: ?Error, result: ?string)) => {
....
}
或删除 =>
export function getStoredData (key: string, callback?: ?(error: ?Error, result: ?string)){
....
}
正如@MayankShukla 所说,您没有正确使用箭头功能。
为了修复你的表达式,你还需要添加如下=>void
来修复callback
,
的函数类型
export function getStoredData(key: string, callback?: ?(error: ?Error, result: ?string) => void ) {
在我的 vs 代码中 意外标识符 在上面的代码中消失了。
针对评论 1 进行了编辑:要从 callback
获取结果,请尝试更改函数
export async function getStoredData(key: string, callback?: ?(error: ?Error, result: ?string) => void ) {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
callback(null, value);
return value;
}
} catch (error) {
callback(error, null);
return error;
}
}
/*
* created by Suresh Mewara
* Date 09-07-2018
*/
import React, {Component} from 'react';
import {AsyncStorage, } from 'react-native';
export class DBPreference {
// Database key
static LOGIN_STATUS = 'loginStatus';
static EULA_STATUS = 'eulaStatus';
static ACCESS_CODE = 'accessCode';
static retrieveData = async (key) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
// We have data!!
console.warn(value);
return value;
}
} catch (error) {
// Error retrieving data
}
}
static getStoredData = async (key, callback) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
callback(null, value);
console.warn(value);
return value
}
} catch (error) {
callback(error, null);
return error
}
};
}
朋友,我会拿一个 class 来定义所有功能。现在我们需要一些函数及其回调。所以我定义如下。
回调定义:
export const getStoredData(key: string, callback?: ?(error: ?Error, result: ?string)) =>{
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
return value
}
} catch (error) {
return error
}
}
调用函数如下:
getStoredData('apple' , (error , result) =>{
if (error) {
console.log('error is = ', error);
} else {
console.log('result is = ', result);
}
});
但是我在定义函数意外标记时出错。
请帮助我。
您的语法错误,因为您没有按照您的意愿导出函数。尝试分配您的常量并正确关闭括号:
export const getStoredData = (key, callback) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
return value
}
} catch (error) {
return error
}
};
getStoredData('apple', (error, result) => {
//do stuff
});
你错误地使用了箭头函数,你忘记了 =
,意外的标记是因为这里 =>
:
export const getStoredData(key: string, callback?: ?(error: ?Error, result: ?string)) => {
....
}
要么这样写(getStoredData后注意=
):
export const getStoredData = (key: string, callback?: ?(error: ?Error, result: ?string)) => {
....
}
或删除 =>
export function getStoredData (key: string, callback?: ?(error: ?Error, result: ?string)){
....
}
正如@MayankShukla 所说,您没有正确使用箭头功能。
为了修复你的表达式,你还需要添加如下=>void
来修复callback
,
export function getStoredData(key: string, callback?: ?(error: ?Error, result: ?string) => void ) {
在我的 vs 代码中 意外标识符 在上面的代码中消失了。
针对评论 1 进行了编辑:要从 callback
获取结果,请尝试更改函数
export async function getStoredData(key: string, callback?: ?(error: ?Error, result: ?string) => void ) {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
callback(null, value);
return value;
}
} catch (error) {
callback(error, null);
return error;
}
}
/*
* created by Suresh Mewara
* Date 09-07-2018
*/
import React, {Component} from 'react';
import {AsyncStorage, } from 'react-native';
export class DBPreference {
// Database key
static LOGIN_STATUS = 'loginStatus';
static EULA_STATUS = 'eulaStatus';
static ACCESS_CODE = 'accessCode';
static retrieveData = async (key) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null) {
// We have data!!
console.warn(value);
return value;
}
} catch (error) {
// Error retrieving data
}
}
static getStoredData = async (key, callback) => {
try {
const value = await AsyncStorage.getItem(key);
if (value !== null){
callback(null, value);
console.warn(value);
return value
}
} catch (error) {
callback(error, null);
return error
}
};
}