Определение функции обратного вызова и проблема с вызовом в React Native

Друг, я возьму один класс для определения всех функций. Теперь нам потребовалась часть функции с ее обратным вызовом. Поэтому я определяю, как показано ниже.

Определение обратного вызова:

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

Но у меня есть ошибка, чтобы определить непредвиденный токен функции.

Помогите мне, пожалуйста.


person Kirit Modi    schedule 28.08.2017    source источник
comment
Это синтаксическая ошибка   -  person Hosar    schedule 28.08.2017


Ответы (3)


Как сказал @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;
    }
}
person Val    schedule 28.08.2017
comment
да, я обновляю, но вызываю функцию, ничего не получаю ни ошибки, ни результата. - person Kirit Modi; 28.08.2017
comment
У меня есть одна проблема, помогите мне: заголовок stackoverflow.com/questions/48987496/ - person Kirit Modi; 26.02.2018
comment
Приложение убило проблему вызова API, пожалуйста, помогите мне stackoverflow.com/questions/51023044/ - person Kirit Modi; 25.06.2018
comment
@KiritModi В настоящее время я занимаюсь c # wpf, а не проектом, ориентированным на реакцию, в течение 8 месяцев. У меня сейчас нет среды для реагирования на нативные... - person Val; 27.06.2018

Вы используете функцию стрелки неправильным образом, вы забыли =, Неожиданный токен из-за этого => здесь:

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)){
   ....
}
person Mayank Shukla    schedule 28.08.2017
comment
проверьте обновленный ответ, используйте export const с arrow funciton или используйте ключевое слово function без arrow function и используйте любой способ. - person Mayank Shukla; 28.08.2017
comment
но я получу неожиданный токен ошибки, expexted =›. - person Kirit Modi; 28.08.2017
comment
я думаю, что вы не используете плагин преобразования класса, поэтому он выдает ошибку с функция стрелки, проверьте этот ответ как использовать плагин для стрелочной функции - person Mayank Shukla; 28.08.2017
comment
да, я попробую еще и второй, в котором ошибка неожиданного токена, expexted =› - person Kirit Modi; 28.08.2017
comment
но во втором методе стрелки нет, проверьте ответ еще раз, вам нужно удалить стрелку и использовать ключевое слово function :) - person Mayank Shukla; 28.08.2017

Ваш синтаксис неверен, потому что вы не экспортируете функцию так, как хотите. Попробуйте назначить свою константу и правильно закрыть скобки:

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
});
person Daniel Andrei    schedule 28.08.2017
comment
@KiritModi Обновлен ответ, удаляющий определения типов. Я считаю, что что-то не так, я не слишком хорошо знаком с машинописью. - person Daniel Andrei; 28.08.2017
comment
Не работает также. - person Kirit Modi; 28.08.2017