我希望并行执行这三个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
答案 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);