[ReactNative] Improve error handling with missing bridge callback
Summary: This will throw an error message with the problematic callback module/method. Previously we would get an invariant in this case when we try to access `callback.apply` later in the method.
This commit is contained in:
parent
5dbde93ec6
commit
99bd57aef2
|
@ -65,13 +65,11 @@ class MessageQueue {
|
||||||
localModules && this._genLookupTables(
|
localModules && this._genLookupTables(
|
||||||
localModules, this._moduleTable, this._methodTable);
|
localModules, this._moduleTable, this._methodTable);
|
||||||
|
|
||||||
if (__DEV__) {
|
this._debugInfo = {};
|
||||||
this._debugInfo = {};
|
this._remoteModuleTable = {};
|
||||||
this._remoteModuleTable = {};
|
this._remoteMethodTable = {};
|
||||||
this._remoteMethodTable = {};
|
this._genLookupTables(
|
||||||
this._genLookupTables(
|
remoteModules, this._remoteModuleTable, this._remoteMethodTable);
|
||||||
remoteModules, this._remoteModuleTable, this._remoteMethodTable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -116,13 +114,11 @@ class MessageQueue {
|
||||||
*/
|
*/
|
||||||
__nativeCall(module, method, params, onFail, onSucc) {
|
__nativeCall(module, method, params, onFail, onSucc) {
|
||||||
if (onFail || onSucc) {
|
if (onFail || onSucc) {
|
||||||
if (__DEV__) {
|
// eventually delete old debug info
|
||||||
// eventually delete old debug info
|
(this._callbackID > (1 << 5)) &&
|
||||||
(this._callbackID > (1 << 5)) &&
|
(this._debugInfo[this._callbackID >> 5] = null);
|
||||||
(this._debugInfo[this._callbackID >> 5] = null);
|
|
||||||
|
|
||||||
this._debugInfo[this._callbackID >> 1] = [module, method];
|
this._debugInfo[this._callbackID >> 1] = [module, method];
|
||||||
}
|
|
||||||
onFail && params.push(this._callbackID);
|
onFail && params.push(this._callbackID);
|
||||||
this._callbacks[this._callbackID++] = onFail;
|
this._callbacks[this._callbackID++] = onFail;
|
||||||
onSucc && params.push(this._callbackID);
|
onSucc && params.push(this._callbackID);
|
||||||
|
@ -155,13 +151,15 @@ class MessageQueue {
|
||||||
BridgeProfiling.profile(
|
BridgeProfiling.profile(
|
||||||
() => `MessageQueue.invokeCallback(${cbID}, ${stringifySafe(args)})`);
|
() => `MessageQueue.invokeCallback(${cbID}, ${stringifySafe(args)})`);
|
||||||
let callback = this._callbacks[cbID];
|
let callback = this._callbacks[cbID];
|
||||||
if (__DEV__) {
|
if (!callback || __DEV__) {
|
||||||
let debug = this._debugInfo[cbID >> 1];
|
let debug = this._debugInfo[cbID >> 1];
|
||||||
let module = debug && this._remoteModuleTable[debug[0]];
|
let module = debug && this._remoteModuleTable[debug[0]];
|
||||||
let method = debug && this._remoteMethodTable[debug[0]][debug[1]];
|
let method = debug && this._remoteMethodTable[debug[0]][debug[1]];
|
||||||
if (!callback) {
|
invariant(
|
||||||
console.error(`Callback with id ${cbID}: ${module}.${method}() not found`);
|
callback,
|
||||||
} else if (SPY_MODE) {
|
`Callback with id ${cbID}: ${module}.${method}() not found`
|
||||||
|
);
|
||||||
|
if (callback && SPY_MODE) {
|
||||||
console.log('N->JS : <callback for ' + module + '.' + method + '>(' + JSON.stringify(args) + ')');
|
console.log('N->JS : <callback for ' + module + '.' + method + '>(' + JSON.stringify(args) + ')');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue