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
,就可能解决您的问题?