如何执行多个 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
});

A​​nid 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()));