[英]How to wait array until complete, then execute the function?
我有一些麻烦。 我希望我的 function 在我的阵列完成后执行。 但是我的 function 执行虽然我的数组不完整。 你能修复我的代码吗?
const historyPermintaanObat2 = obat => {
let array = [];
db.child("itemPermintaan")
.orderByChild("id")
.equalTo(obat.id)
.on("child_added", snapshot => {
let obj = snapshot.val();
let registerPermintaanRef = db.child(
`registerPermintaan/${obj.idPermintaan}`
);
registerPermintaanRef.once("value", snap => {
let username = snap.val().username;
let createdAt = snap.val().createdAt;
let approvedAt = snap.val().approvedAt;
let unit = snap.val().unit;
let obj2 = { ...obj, username, createdAt, approvedAt, unit };
array.push(obj2);
});
});
return array;
};
结果是[]
空数组。 如果我更改return array.length > 0 && array
什么都不会发生..
我想通了,使用once
和Promise.all()
const historyPermintaanObat2 = obat => {
db.child("itemPermintaan")
.orderByChild("id")
.equalTo(obat.id)
.once("value", snapshot => {
let array = [];
let obj = Object.values(snapshot.val());
obj.forEach(e => {
let registerPermintaanRef = db.child(
`registerPermintaan/${e.idPermintaan}`
);
let promise = registerPermintaanRef.once("value").then(snap => {
let username = snap.val().username;
let createdAt = snap.val().createdAt;
let approvedAt = snap.val().approvedAt;
let unit = snap.val().unit;
let obj2 = { ...e, username, createdAt, approvedAt, unit };
return obj2;
});
array.push(promise);
});
return Promise.all(array).then(value => {
return value;
});
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.