如何执行多个 Firebase 请求并在所有请求完成后接收回调?
How to execute multiple Firebase request and receive a callback when all requests are finished?
我想并行执行这三个 Firebase 请求,并在所有请求完成后收到回调。我以为我可以使用 await*,但 Babel 似乎不支持它。我不担心数据一致性,因为我正在编写 to/updating 不同的 firebase 数据节点。
我正在使用 babel。
await* Promise.all([
firebaseRef1.push(data1),
firebaseRef2.push(data2),
firebaseRef3.push(data3)
]);
// all three are finished
最初是这样的:
const [first, second, third] = await* Promise.all([
firebaseRef1.push(data1),
firebaseRef2.push(data2),
firebaseRef3.push(data3)
]);
// all three are finished
push()
没有 return 承诺,因此您必须使用它的回调来解决或拒绝您自己的承诺。
const allPushes = Promise.all([
new Promise((resolve, reject) => {
firebaseRef1.push(data1, error => {
error ? reject(error) : resolve();
});
}),
new Promise((resolve, reject) => {
firebaseRef2.push(data2, error => {
error ? reject(error) : resolve();
});
}),
new Promise((resolve, reject) => {
firebaseRef3.push(data3, error => {
error ? reject(error) : resolve();
});
})
]);
allPushes.then(() => {
// all three are finished
}, error => {
// A push failed
});
Anid Monsur 的回答是 100% 正确。
但是,请务必注意,Firebase 使用 WebSocket。这意味着没有实际的 请求 。在你的情况下,只需调用 .push()
就可以了,不用担心回调。
firebaseRef1.push(data1);
firebaseRef2.push(data2);
firebaseRef3.push(data3);
在侦听器中您会知道回调已完成。
firebaseRef1.on('value', (snap) => console.log(snap.val()));
firebaseRef2.on('value', (snap) => console.log(snap.val()));
firebaseRef3.on('value', (snap) => console.log(snap.val()));
我想并行执行这三个 Firebase 请求,并在所有请求完成后收到回调。我以为我可以使用 await*,但 Babel 似乎不支持它。我不担心数据一致性,因为我正在编写 to/updating 不同的 firebase 数据节点。
我正在使用 babel。
await* Promise.all([
firebaseRef1.push(data1),
firebaseRef2.push(data2),
firebaseRef3.push(data3)
]);
// all three are finished
最初是这样的:
const [first, second, third] = await* Promise.all([
firebaseRef1.push(data1),
firebaseRef2.push(data2),
firebaseRef3.push(data3)
]);
// all three are finished
push()
没有 return 承诺,因此您必须使用它的回调来解决或拒绝您自己的承诺。
const allPushes = Promise.all([
new Promise((resolve, reject) => {
firebaseRef1.push(data1, error => {
error ? reject(error) : resolve();
});
}),
new Promise((resolve, reject) => {
firebaseRef2.push(data2, error => {
error ? reject(error) : resolve();
});
}),
new Promise((resolve, reject) => {
firebaseRef3.push(data3, error => {
error ? reject(error) : resolve();
});
})
]);
allPushes.then(() => {
// all three are finished
}, error => {
// A push failed
});
Anid Monsur 的回答是 100% 正确。
但是,请务必注意,Firebase 使用 WebSocket。这意味着没有实际的 请求 。在你的情况下,只需调用 .push()
就可以了,不用担心回调。
firebaseRef1.push(data1);
firebaseRef2.push(data2);
firebaseRef3.push(data3);
在侦听器中您会知道回调已完成。
firebaseRef1.on('value', (snap) => console.log(snap.val()));
firebaseRef2.on('value', (snap) => console.log(snap.val()));
firebaseRef3.on('value', (snap) => console.log(snap.val()));