null 不是对象(正在评估“RCTAsyncStorage.multiMerge”)

Cec*_*uez 5 javascript ios react-native

我最近升级到了 Expo SDK 43。

我现在收到此错误:

抛出它的代码行是:

if (!RCTAsyncStorage.multiMerge) {
Run Code Online (Sandbox Code Playgroud)

我使用的是最新版本的 AsyncStorage。

这似乎是由于我使用了 firebase-js-sdk 造成的。

不幸的是,由于这是一个 iOS/Android/Web 项目,因此这是必要的。

当我嘲笑我的 Firebase 导出时,一切正常:

const auth = () => {};

const analytics = () => {};

export default { auth, analytics };
Run Code Online (Sandbox Code Playgroud)

但是当我使用 firebase-js-sdk 函数时,我收到上述消息。

此代码会导致错误(无论我使用哪个版本的身份验证)

let auth = initializeAuth(config, {
  persistence: getReactNativePersistence(AsyncStorage),
});
//let auth = getAuth(config);
let analytics = getAnalytics(config);

export default { auth, analytics };
Run Code Online (Sandbox Code Playgroud)

Sal*_*aJJ 0

您可以通过添加可选链接(问号“?”)来避免该特定错误:

if (!RCTAsyncStorage?.multiMerge) {
Run Code Online (Sandbox Code Playgroud)

它将短路undefined(从而生成if false),而不是因尝试签入 null 对象而抛出错误。

至于为什么RCTAsyncStorage会为空,您必须检查第一次获取/声明它的位置,并回溯到它未加载的点,也许您正在使用与 firebase-js-sdk 冲突的东西。

正如文档multiMerge中提到的,也可能并不总是受支持:

multiMerge
[...]注意:并非所有本机实现都支持此功能。