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
  }
};
}