我目前正在着装应用程序上,遇到了一个问题,该问题使我花费了很多时间,多杯咖啡和头部刮擦!
基本上,我正在尝试返回所有礼服所有者个人资料数据的数组。
它是如此:
getDressData()=> {
-商店着装细节
-服装店老板
},
getOwnerData()=> {
-遍历所有服装所有者
-获取他们的个人资料
},
resolve()=> {
-返回着装和过滤数据
-返回礼服所有者的个人资料数据
}
这是代码:
return new Promise((resolve, reject) => {
var db = firebase.firestore();
var dresses = [];
var filters = [];
var dressOwners = [];
var ownerData = [];
var dressCollection = db.collection('dresses');
var ownerCollection = db.collection('account');
var dressesRef = dressCollection.orderBy("date", "desc");
dressesRef.get()
.then(function(doc) {
if (!doc.empty) {
doc.docs.forEach(function(doc) {
if (doc.exists) {
var item = doc.data();
dresses.push({
'dressId' : doc.id,
'colour' : item.colour,
'credit' : item.credit,
'date' : item.date,
'description' : item.description,
'images' : item.images,
'owner' : item.owner,
'size' : item.size
});
if(filters.filter(x => x.size == item.size).length == 0) {
filters.push({"size" : item.size, "colours": [item.colour]});
}
else {
var index = filters.findIndex((x => x.size == item.size));
if (!filters[index].colours.filter(x => x.colours == item.colour).length > 0) {
filters[index].colours.push(item.colour);
}
}
if (dressOwners.indexOf(item.owner) === -1) {
dressOwners.push(item.owner);
}
}
});
}
})
.then(function(){
for (let i = 0; i < dressOwners.length; i++) {
ownerCollection.doc(dressOwners[i]).get()
.then(function(doc){
if (doc.exists) {
item = doc.data();
ownerData.push({
'uid' : doc.id,
'displayName' : item.displayName,
'feedback_neg' : item.feedback_neg,
'feedback_pos' : item.feedback_pos,
'registerDate' : item.registerDate,
'address' : item.address,
'email' : item.email
});
}
});
}
})
.then(function(){
resolve({
"dresses" : dresses,
"ownerData" : ownerData,
"filters" : filters
});
});
});
这是它返回的内容:
从图像中可以看到,两个数组都返回正确的数据。但是,如果您查看第一个数组,它将显示'[]',第二个数组将显示'(4)[{…},{…},{…},{…}]'。
我试图让第一个数组像第二个数组一样返回。
问题是我无法从第一个数组获取数据。衣服阵列(第二个),我可以得到dress [i] .colour等
我在做什么错?是我解析数组的方式,还是代码的.then()结构有问题?
答案 0 :(得分:-1)
如果我没记错的话,如果您不从.then链中返回任何内容,那么.thens会立即解析,因为它们实际上并没有通过显式返回实际等待任何内容。尝试从第一个.then返回dressOwner,然后在下面的.then
中使用传入的数据然后,在下面的.then中,在for循环中创建多个promise,将这些promise收集到数组中,然后以正确的顺序返回Promis.all(myPromiseArray)的结果以到达最终的.then