Javascript React-Native promise返回未定义(当它不为空时)

Javascript React-Native promise返回未定义(当它不为空时),javascript,react-native,Javascript,React Native,我正在尝试获取子测验,并通过控制台日志检查信息是否正确。但是当我尝试console.log(测验)时,我得到了3个承诺。尝试查看其中的信息将返回未定义的: quizzes[0]。然后(r=>{console.log(“r”)}) 这是我的代码: async componentDidMount() { const quizzes = await this.quizzes(); await this.subQuizzes(quizzes); } quizzes = asyn

我正在尝试获取子测验,并通过控制台日志检查信息是否正确。但是当我尝试
console.log(测验)
时,我得到了3个承诺。尝试查看其中的信息将返回未定义的:
quizzes[0]。然后(r=>{console.log(“r”)})
这是我的代码:

async componentDidMount() {
    const quizzes = await this.quizzes();
    await this.subQuizzes(quizzes);
  }

  quizzes = async () => {
    return await firebase
      .firestore()
      .collection("quiz")
      .where("parentId", "==", "")
      .get();
  };

  subQuizzes = async (quizzes) => {
    quizzes = quizzes.docs.map(async (quiz) => {
      const subQuiz = await firebase
        .firestore()
        .collection("quiz")
        .where("parentId", "==", quiz.id)
        .get();

      subQuiz.docs.map((subQ) => {
        return { uid: quiz.id, ...quiz.data(), quizzes: subQ.data() };
      });
    });
    quizzes[0].then((r) => {
      console.log("RESULT", r);
    });
  };

如何从这些承诺中找回3个对象?我的错误在哪里?谢谢大家!

您没有从第一个映射返回正确的值:

我想你应该这样做:

return subQuiz.docs.map((subQ) => {
  return { uid: quiz.id, ...quiz.data(), quizzes: subQ.data() };
});
要从这些承诺中检索3对象,可以使用Promise.all方法:

const subQuizzes = async (quizzes) => {
  const quizzes = await Promise.all(
    quizzes.docs.map(async (quiz) => {
      const subQuiz = await firebase
        .firestore()
        .collection('quiz')
        .where('parentId', '==', quiz.id)
        .get();

      return subQuiz.docs.map((subQ) => {
        return { uid: quiz.id, ...quiz.data(), quizzes: subQ.data() };
      });
    })
  );
  console.log('RESULT', quizzes);
};

async
函数总是返回一个承诺,这基本上就是关键字的要点。而
测验
中的承诺必须解析为
未定义
,因为该异步函数不返回任何内容。在我看来,您也误解了
map
方法的作用(
subquick.docs.map(…)
行创建了一个新数组,并简单地将其丢弃,而不做任何处理)。只需在上述行前面添加一个
return
,就可能解决您的问题?