Javascript 如何使用Promise.all等待两个请求,然后在回调中调用其他函数?
我试图等待两个请求我从firebase DB获取数据并设置为状态 我想在两个请求完成后,将结果数据连接到一个数组中 所以我尝试在一个数组中推送两个请求,然后使用Javascript 如何使用Promise.all等待两个请求,然后在回调中调用其他函数?,javascript,reactjs,firebase,react-native,firebase-realtime-database,Javascript,Reactjs,Firebase,React Native,Firebase Realtime Database,我试图等待两个请求我从firebase DB获取数据并设置为状态 我想在两个请求完成后,将结果数据连接到一个数组中 所以我尝试在一个数组中推送两个请求,然后使用 > Promise.all(promises).then(()=>this.updateData()); 但是它没有像预期的那样工作,我可以在控制台中看到updateData()以前调用过的“ 代码在这里 fetchOrders = async () => { .... let promises
> Promise.all(promises).then(()=>this.updateData());
但是它没有像预期的那样工作,我可以在控制台中看到updateData()
以前调用过的“
代码在这里
fetchOrders = async () => {
....
let promises = [];
promises.push(
// First service orders
database()
.ref(
`Providers/CategoriesOrders/${this.state.serviceName[0] ||
this.state.serviceStorage[0]}`,
)
.on('value', this.ordersCallbackOne),
);
promises.push(
// Second service orders
database()
.ref(
`Providers/CategoriesOrders/${this.state.serviceName[1] ||
this.state.serviceStorage[1]}`,
)
.on('value', this.ordersCallbackTwo),
);
Promise.all(promises).then(() => this.updateData());
};
ordersCallbackTwo = snapshot => {
let orderArr = [];
snapshot.forEach(childSnapshot => {
orderArr.push({
snapshotKey: childSnapshot.key,
username: childSnapshot.val().username,
});
});
this.setState({orderServiceTwo: orderArr}, () =>
console.log('2', this.state.orderServiceTwo), // it's log data here
);
};
两个请求完成后我要调用的函数
updateData = () => {
// if (this.rejectedOrders?.length >= 1) {
// const orders = this.state.orders.filter(
// order => !this.rejectedOrders.some(key => order.snapshotKey === key),
// );
// this.setState({orders, loading: false});
// return;
// }
console.log('ordersOne!', this.state.orderServiceOne); // empty!
const order1IDs = new Set(
this.state.orderServiceOne.map(({snapshotKey}) => snapshotKey),
);
console.log('order1IDs', order1IDs);
const combined = [
...this.state.orderServiceOne,
...this.orderServiceTwo?.filter(
({snapshotKey}) => !order1IDs.has(snapshotKey),
),
];
console.log('combined', combined);
this.setState({
orders: combined,
loading: false,
});
};
on('value')
不返回承诺,在这里不起作用。它只用于将侦听器附加到查询,并将无限期地接收结果,直到调用off()
相反,您应该使用,它只执行一次查询,并在查询完成时返回一个承诺。on('value')
不返回承诺,在这里不起作用。它只用于将侦听器附加到查询,并将无限期地接收结果,直到调用off()
相反,您应该使用,它只执行一次查询,并在查询完成时返回一个承诺。这样做
database().ref(`Providers/CategoriesOrders/${this.state.serviceName[0]| | this.state.serviceStorage[0]}')。on('value',this.orderscalbackone)
返回承诺?@ZHANGLuyao我想是的。数据库().ref(`Providers/CategoriesOrders/${this.state.serviceName[0]| | this.state.serviceStorage[0]}')。on('value',this.orderscalbackone)
返回承诺吗?@ZHANGLuyao我想是的。。嗯,我想是('value'))像一次一样工作,我重写了它,但是组合的
值没有像以前那样记录!呃,我认为('value')像一次一样工作,我重写了它,但是组合的
值没有像以前那样记录!