You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Notify Expo iOS下未处理Promise拒绝问题求助

问题解决:Native Notify异步调用冲突与未处理Promise警告

警告指向的Promise

这个警告来自getPushDataObject()或registerNNPushToken()内部的异步操作——这两个方法底层涉及异步的本地存储读取或网络请求,你同步调用且未等待前一次操作完成,组件重复渲染时会多次发起异步调用,进而触发「Another async call to this method is in progress」的冲突错误,同时因未处理Promise的拒绝状态,出现「Possible Unhandled Promise Rejection」警告。

解决方法(await处理)

需要将初始化逻辑放到useEffect中,通过async/await确保异步操作顺序执行,同时用State管理数据,避免重复触发调用:

修正后的代码

import { StyleSheet, Text, View } from "react-native";
import React, { useState, useEffect } from "react";
import { getPushDataObject } from "native-notify";
import registerNNPushToken from "native-notify";

export default function App() {
  const [pushData, setPushData] = useState(null);

  useEffect(() => {
    const initNotify = async () => {
      // 先等待注册完成,再执行数据获取
      await registerNNPushToken(7141, "Xy4gdSRWQlE1DUBmwuS3x0");
      try {
        const dataObj = await getPushDataObject();
        setPushData(dataObj);
        console.log("推送数据:", dataObj);
      } catch (err) {
        // 捕获并处理Promise拒绝,消除警告
        console.error("获取推送数据失败:", err);
      }
    };

    initNotify();
  }, []); // 空依赖数组确保仅在组件挂载时执行一次

  return (
    <View style={styles.container}>
      <Text>Hello world.</Text>
      {pushData && <Text>推送内容: {JSON.stringify(pushData)}</Text>}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
});

关键修改说明

  • 把初始化逻辑封装到useEffect的异步函数中,空依赖数组避免组件重复渲染时多次触发异步调用,从根源解决并发冲突。
  • 用await依次执行registerNNPushToken和getPushDataObject,确保前一个异步操作完成后再执行下一个,避免调用冲突。
  • 用useState存储推送数据,保证数据更新时组件能正确响应,同时避免同步赋值导致的状态不一致。
  • 添加try/catch捕获getPushDataObject的Promise拒绝,彻底消除未处理Promise的警告。

内容的提问来源于stack exchange,提问作者rolandist_scim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:42:44