无法从Promise,上下文API(反应钩子)读取未定义的属性“代码”

李长hy

我正在使用react hook制作我的第一个混合Web应用程序。我面临诺言和上下文API的计时问题。

这是我面临的逻辑。

  1. fetchApplications函数从firebase firestore获取数据,它在globalcontext.js中定义(在tableView中调用)
  2. tableView.js在useEffect中调用fetchApplications。
  3. fetchApplications被定义为Promise函数,我希望它将解析(返回)数据,直到获取数据为止,它将重新封装(返回)对象,例如{code:200,data:data}

fetchData.code中的问题

无法读取未定义的属性“代码”

这是我的代码

在tableview.js中

  React.useEffect(() => {
      context.fetchApplications(auth.userId, "")
      .then(function (fetchData) {
      console.log("Fetched data: ", fetchData);   ///this is undefined
      if (fetchData.code !== 200) {               /// error part
        alert(fetchData.msg);
      }
      if (!fetchData.data) {
        alert("No applications");
      }
      setsData(fetchData.data);
    });
  }, []);

在GlobalContext.js中

async function fetchApplications(userId, role) {
    return new Promise((resolve, reject) => {
      // resolve({ code: 200, data: "data" });     //If I add this code, it will be alright.

      let dataArray = [];
      let applicationRef = db
        .collection("Users")
        .doc(userId)
        .collection("Applications");
      applicationRef
        .get()
        .then(function (qs) {
          qs.forEach(function (doc) {             //doesn't work
            console.log(doc.id, " => ", doc.data());
            console.log(doc.size, " => ", typeof doc);
            dataArray.push(doc.data());
          });
          return Promise.resolve(dataArray);
        })
        .then((data) => {
          console.log("Global, Fetched Data", dataArray);
          if (data) {
            resolve({ code: 200, data: data });
          }
          return;
        });
    }).catch(function (error) {
      reject({ code: 400, msg: "시스템에러 고객센터에 문의해주세요" });
    });
  }

在codeendbox
中写如果我写的诺言方式错误,请告诉我。谢谢

nk

fetchData在访问其属性之前,必须检查是否已定义。

简短的形式是

if (fetchData && fetchData.code !== 200){...}

应用于您的代码:

 React.useEffect(() => {
      context.fetchApplications(auth.userId, "")
      .then(function (fetchData) {
      console.log("Fetched data: ", fetchData);   ///this is undefined
      if (fetchData && fetchData.code !== 200) {               /// error part
        alert(fetchData.msg);
      }else {
        alert("No applications");
      }
      setsData(fetchData.data);
    });
  }, []);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反应上下文:TypeError:无法读取未定义的属性“areResultsVisible”

无法读取未定义的属性“上下文”-GraphQL

反应上下文状态属性未定义

反应上下文-“ this”未定义

反应上下文未定义

无法读取未定义的属性...(上下文中的属性/值)

使用上下文 API 在函数组件中未定义反应状态属性

TypeError:无法读取未定义的 React Native 上下文的属性“提供者”

TypeError:无法读取VueJS上下文中未定义的属性“替换”

传递上下文时无法读取未定义的属性“参数” - Google 上的操作

构造函数中未定义上下文 - 反应

反应上下文-'contextType'未定义

反应上下文返回未定义

反应上下文返回未定义

反应-无法读取未定义的属性

无法读取未定义(反应)的属性“”?

反应useRef钩子导致“无法读取未定义的属性'0'”错误

使用 axios 反应 useEffect 钩子无法读取未定义的属性

无法从上下文中解构对象的属性,因为它是未定义的

我的上下文是在构造函数中定义的,但未在函数中定义。无法读取HTMLCanvasElement.draw中未定义的属性“ beginPath”

无法读取未定义的属性“ promise”

上下文API问题-对象未定义

类型“未定义”上不存在属性“句柄”-反应上下文和打字稿

我正在尝试从componentDidMount函数的上下文中调用函数,但是我得到了无法读取的未定义错误属性

ReferenceError:上下文未定义

上下文未定义

上下文返回未定义

无法读取 useEffect 钩子上未定义的属性“map”

ReactJS钩子无法读取未定义错误的属性“ push”