所有请求完成后,如何执行多个Firebase请求并接收回调?

时间:2015-10-16 20:06:19

标签: javascript firebase babeljs

我希望并行执行这三个Firebase请求,并在所有请求完成后接收回调。我以为我可以使用等待*,但似乎Babel不支持它。我并不担心数据的一致性,因为我正在编写/更新不同的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

2 个答案:

答案 0 :(得分:5)

push()不会返回承诺,因此您必须使用它的回调来解决或拒绝您自己的承诺。

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
});

答案 1 :(得分:1)

Anid Monsur的回答是100%正确。

但是,重要的是要注意Firebase使用WebSockets。这意味着没有实际的请求。在你的情况下,只需拨打 1 using PyPlot 2 3 4 ion() 5 fig = figure() 6 ax = fig[:add_subplot](111) 7 img = ax[:imshow](rand(50,50)) 8 show() 9 10 # draw some data in loop 11 for i in 1:10 12 # wait for a second 13 sleep(1) 14 # replace the image contents 15 img[:set_array](rand(50,50)) 16 # redraw the figure 17 fig[:canvas][:draw] 18 end 并且不用担心回调就可以了。

.push()

听众会知道回调已经完成。

firebaseRef1.push(data1);
firebaseRef2.push(data2);
firebaseRef3.push(data3);