我正在使用 Firebase 数据库和 Javascript,并且我有代码可以获取每个类别中的每个问题。我有一个名为“类别”的对象,其中包含名称、问题和问题计数,然后它将被推入类别列表(questionsPerCategory)。在我刚刚做的回调函数中console.log(questionsPerCategory)
。它打印包含类别和问题的对象(数组)。现在我的问题是当我这样做时console.log(questionsPerCategory[0])
是说它是不明确的,我也尝试过console.log(questionsPerCategory.pop())
因为它是一个数组,但它也是不明确的。这是为什么?下面是代码和控制台日志的图像。附加说明:代码 A 和 C 是异步的,代码 B 和 D 是同步的。
this.getQuestionsForEachCategory = function(callback, questions, questionsPerCategory) {
var ref = firebase.database().ref('category');
var questionRef = firebase.database().ref('question');
console.log('get questions for each category');
// CODE A
ref.once("value", function(snapshot) {
// CODE B
snapshot.forEach(function(childSnapshot) {
var key = childSnapshot.key;
var childData = childSnapshot.val();
var category = {
category_name: childData.category_name
};
// CODE C
questionRef.orderByChild("category_name").equalTo(childData.category_name).once("value", function(questionSnapshot){
var count = 0;
var q = [];
// CODE D
questionSnapshot.forEach(function(childQuestionSnapshot) {
var questionObj = childQuestionSnapshot.val();
count++;
questions.push(questionObj.question);
q.push(questionObj.question);
});
category.questions = q;
category.questionCount = count;
questionsPerCategory.push(category);
});
});
callback(questionsPerCategory);
});
};
The callback(questionsPerCategory);
应该发生在所有的时候async通话结束。
现在的questionsPerCategory
还没有准备好时callback叫做。
我会用Promise API
来实现这一点。
取决于Promise
您正在使用的库,这可以通过不同的方式完成,例如通过使用bluebird http://bluebirdjs.com/docs/getting-started.html看起来你需要map http://bluebirdjs.com/docs/api/promise.map.html功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)