Какой синтаксис JS для вызова собственного модуля, который имеет один параметр Promise? - PullRequest
1 голос
/ 05 июля 2019

Подпись Java объявлена ​​как:

@ReactMethod
public void someMethod(@NonNull String aString, @NonNull final Promise promise);

В этом случае Javascript называет это так:

async someMethod() {
    try {
      var result = await MyModule.someMethod("Hello",)
      ...
    } catch (e) {
      console.error(e);
    }
  }

Это работает.

Теперь у меня есть другой метод, который выглядит следующим образом:

@ReactMethod
public void someOtherMethod(@NonNull final Promise promise);

И я не могу позвонить из JS, потому что он жалуется (ошибки очень загадочны для такого неопытного разработчика JS, как я). Я не собираюсь становиться опытным разработчиком JS, это небольшой проект, с которым мне нужно помочь, но я не могу понять, как это назвать.

Я пробовал варианты:

var result = await MyModule.someOtherMethod()
var result = await MyModule.someOtherMethod(,)
var result = await MyModule.someOtherMethod({})
... 

Большинство примеров, которые я вижу, используют Callback (не Promise) или всегда и удобно имеют более одного параметра, где обещание (по замыслу) является последним параметром. Но я не смог найти ни одного примера с методом, который только принимает Обещание.

Может быть, я не знаю, как искать ... (?)

Спасибо, что просветили меня.

1 Ответ

0 голосов
/ 09 июля 2019

Я закрываю это голосование, но для дальнейшего использования, если оно не пройдет, синтаксис ожидаемый :

await module.someMethod()

работал при вызове метода @ReactMethodчья подпись выглядит как

void someMethod(@NonNull Promise p);

Понятия не имею, что я сделал с черной магией (*), но теперь она работает.

(*) По большей части я заметил, что при использовании реакции-native, чаще всего полезно убить сервер "metro" и перезапустить его с помощью react-native start --reset-cache, а затем снова запустить приложение.Это заставило мой некомпилируемый / запущенный проект окончательно компилироваться / запускаться нормально много раз, когда другие решения не работали.

Я также выполнил эту команду несколько раз в течение моего времени с реактивом-нативом, так как она исправляла многие ошибки компиляции, которые возникали, когда я делал определенные вещи (не знаю, какие именно).

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

После этого обычно работал react-native run-android (или запуск из Android Studio).

Оттуда (и при использовании реального устройства с Vysor) я получил меню «перезагрузить» и другие вещивыдача в командной строке:

adb shell input keyevent 82

Спасибо за помощь и надеюсь, что это указывает другим людям в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...