【发布时间】:2019-11-16 02:14:33
【问题描述】:
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),要么总是方便地有多个参数,其中promise 是(按设计)最后一个参数。但是我找不到一个示例,其中的方法only 接受Promise。
可能是我不知道如何搜索...(?)
谢谢你启发我。
【问题讨论】:
-
您能否也添加有问题的
error以及如何定义someOtherMethod方法? -
除非方法实现本身处理这种情况,否则您必须将承诺作为第二个参数传递。一个主要原因是 javascript 中没有方法重载。
-
@AayushSharma 处理此类案件是什么意思?我的意思是,如果签名是
someOtherMethod(Promise p),那么你不能像从JS那样调用它吗? (可以用不同的方式调用它吗?)还是有另一个参数来克服缺乏方法重载的问题? (意味着我不能拥有methodA(int x, Promise p)和methodB(int y, Promise p)?) -
@CodeManiac 错误是 JS 语法错误或类似错误,老实说,这一切都隐藏在我每次调用它的尝试中,但是整个 react-native JS 代码在我尝试使用 -incorrect 时爆炸了- 句法。方法定义在问题中,这是伪代码,它们看起来像那样。
-
@MartinMarconcini 我确实为实现处理参数顺序的情况创建了一个jsFiddle。 javascript 中没有重载,也没有静态类型,因此实现必须在 javascript 中处理这种情况。否则,javascript中的参数顺序很重要,如果在实现中没有处理这种情况,它必须是第二个参数。
标签: javascript java react-native promise