错误:Map已经被使用- React Native

3phpmpom  于 2023-11-21  发布在  React
关注(0)|答案(2)|浏览(132)

基本上,我是连接本地android模块与react native,并将信息从native传递到js。

try {
    WritableMap params = new WritableNativeMap();
    params.putInt("connectionStatus", 2);
    sendEvent(mreactContext, "bleConnectionStatus", params);
    promise.resolve(params);
} catch (Exception exe) {
    Log.d(TAG, "Exception--: " + exe);
    promise.reject(exe);
}

字符串
显示异常

Exception--: com.facebook.react.bridge.ObjectAlreadyConsumedException: Map already consumed


注意事项:我已经通过这个答案ObjectAlreadyConsumedException: Receiving map already consumed,但它似乎是关于命令行。我已经写了代码,在该顺序只仍然显示异常。

更新

异常在promise.resolve(params);中,因为当我删除这一行并运行它时,它没有显示任何异常。

ewm0tg9j

ewm0tg9j1#

使用

WritableArray mylist = Arguments.createArray();
try {
WritableMap params = Arguments.createMap();
params.putInt("connectionStatus", 2);
sendEvent(mreactContext, "bleConnectionStatus", params);
mylist.pushMap(params);
promise.resolve(mylist);
} catch (Exception exe) {
Log.d(TAG, "Exception--: " + exe);
promise.reject(exe);
}

字符串

mec1mxoz

mec1mxoz2#

好吧,这是一个旧的线程,但由于我刚刚通过Android到React Native桥实现事件时遇到了这个问题,我想我会分享实际的问题和解决方案,以防对任何人都有用。
React Native可扩展Map实际上并没有实现为Map(至少在Android领域),它被实现为一个Map流(或者至少它表现得像一个流)。(通过,引用,阅读等),它不再可用。认为它已经被处理。不幸的是,这在“广泛的”React Native文档中并不明显-感谢Meta/Facebook/无论他们今年如何称呼自己。
解决方案是在最后一次使用之前的任何一次使用中使用可扩展的Map.copy()(在此之后您不应该关心它不再可用)。
所以OP的代码应该是:

WritableMap params = new WritableNativeMap();
params.putInt("connectionStatus", 2);
sendEvent(mreactContext, "bleConnectionStatus", params.copy());
promise.resolve(params);

字符串

相关问题