React Native 未处理的承诺拒绝 | React-Native,异步,

Posted

技术标签:

【中文标题】React Native 未处理的承诺拒绝 | React-Native,异步,【英文标题】:React Native Unhandled promise rejection | React-Native, Async, 【发布时间】:2021-06-25 21:57:47 【问题描述】:

我不断收到未处理的 Promise Rejection 我正在使用 EXPO CLI 运行 React-Native,并且正在使用 React Hook Forms

我尝试过的事情并没有改变:

    给我的 api (NodeJS) 一个 SSL(我知道 ios 想要一个) 重构为每个字段的常规和反应挂钩 将 BaseUrl 更改为 10.0.2.2,然后尝试了我的个人 IP 地址。 更改为正常的 Promise 并尝试 Axios 调用

onSubmit 函数内的控制台日志从表单返回数据,但它停在那里。

完整错误:

[未处理的承诺拒绝:TypeError: (0, _auth.loginUser) 不是函数。 (在“(0,_auth.loginUser)(数据)”中,“(0,_auth.loginUser)”未定义)] 在 node_modules/react-hook-form/dist/index.cjs.development.js:1204:67 中 在 [本机代码]:flushedQueue 中的 null at [native code]:null in callFunctionReturnFlushedQueue

登录组件代码:

import React from 'react';
import  StyleSheet, View, Text  from 'react-native';

import Input from '../Input';
import Button from '../Button';
import Link from '../Link';
import  useForm, Controller  from "react-hook-form";
import  loginUser  from '../../helpers/data/auth';

const EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]1,3\.[0-9]1,3\.[0-9]1,3\.[0-9]1,3\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]2,))$/;

export default function Login() 
  const  control, handleSubmit, errors  = useForm();

  const onSubmit = async (data) => 
    console.log(data)
    let response = await loginUser(data)
    if (response.status >= 200 && response.status < 300) 
      console.log(response)
     else 
      error
    
  

  return (
    <View style=styles.container>

      <Controller
        control=control
        name="email"
        defaultValue=''
        rules=
          required: value: true, message: 'Email is required' ,
          pattern: 
            value: EMAIL_REGEX,
            message: 'Not a valid email'
          
        
        render=( onChange, onBlur, value ) => (
        <Input
          error=errors.email
          errorText=errors?.email?.message
          onBlur=onBlur
          onChangeText=value => onChange(value)
          value=value
          placeholder='Email'
          textAlign='center'
        />
        )
      />

      <Controller
        control=control
        name="password"
        defaultValue=''
        rules= required: value: true, message: 'Password is required'  
        render=( onChange, onBlur, value ) => (
          <Input
            error=errors.password
            errorText=errors?.password?.message
            onBlur=onBlur
            onChangeText=value => onChange(value)
            value=value
            secureTextEntry=true
            placeholder='Password'
            textAlign='center'
          />
        )
      />
      <Button onPress=handleSubmit(onSubmit) label="LOGIN"/>

      <View style=styles.row>
        <Text style=styles.text>Forgot your login details? </Text>
        <Link onPress=() =>  label='Get help signing in.'/>
      </View>

    </View>
  )

loginUser Fetch 调用:

import  baseUrl  from '../apiKeys.json';

const loginUser = async (data) => 
  const response = await fetch(`$baseUrl/auth/signin`, 
    method: 'POST',
    headers: 
      Accept: 'application/json',
      'Content-Type': 'application/json'
    ,
    body: JSON.stringify(data)
  );
  return response.json();


export default  loginUser ;

救救我……

【问题讨论】:

UPDATE 添加方法后我得到:Network request failed at node_modules/whatwg-fetch/dist/fetch.umd.js:535:17 in setTimeout$argument_0 at [native code]:null in callFunctionReturnFlushedQueue 我收到的所有错误都有这个callFunctionReturnFlushedQueue。有谁知道这是做什么的? 【参考方案1】:

const前面添加export

import  baseUrl  from '../apiKeys.json'; //not quite remember whether u can do this.

//add the export here.

export const loginUser = async (data) => 
  const response = await fetch(`$baseUrl/auth/signin`, 
    headers: 
      Accept: 'application/json',
      'Content-Type': 'application/json'
    ,
    body: JSON.stringify(data)
  );
  return response.json();

【讨论】:

我以前试过;既导出对象中的所有函数,又直接导出函数的开头,均无济于事。我也意识到我没有注释method: 'POST',但现在我得到了一个:Network request failed at node_modules/whatwg-fetch/dist/fetch.umd.js:535:17 in setTimeout$argument_0 at [native code]:null in callFunctionReturnFlushedQueue 你的后端是什么? NodeJs。我正在用邮递员连接它。 所以现在是 nodejs 问题,与您的问题无关吧? 我不相信,因为我可以通过邮递员甚至直接在浏览器中对api进行成功调用。

以上是关于React Native 未处理的承诺拒绝 | React-Native,异步,的主要内容,如果未能解决你的问题,请参考以下文章

未处理的承诺拒绝:TypeError:网络请求在expo react native 中失败

react-native 错误:[未处理的承诺拒绝:错误:获取 Expo 令牌时遇到错误:TypeError:网络请求失败。]

未处理的承诺拒绝:TypeError:网络请求失败 - 在 React Native / Expo 中将 Base64(视频/mp4)转换为 Blob

设置firebase时出错,可能会出现未处理的承诺拒绝

使用React Native Fetch中的对象响应时未处理的Promise Rejection

反应本机中未处理的承诺拒绝错误?