Node.js 如何使用Firebase DB异步回调在嵌套循环中链接Q延迟承诺

Node.js 如何使用Firebase DB异步回调在嵌套循环中链接Q延迟承诺,node.js,firebase,firebase-realtime-database,q,google-cloud-functions,Node.js,Firebase,Firebase Realtime Database,Q,Google Cloud Functions,注意:我知道已经有多个类似的问题被回答了,我读了它们,但是我仍然对我的场景有困难 我有一个(谷歌)Firebase云函数,它需要以一定的顺序运行许多查询,也需要在一个循环中运行。例如,类似这样的内容(使用and): 对于迭代的每个用户,queryC必须等待启动,直到queryA和queryB(可以以任何顺序运行,因此Q.all())完成,functionD必须等待queryC完成 我原以为上面的代码会起作用,但当我运行云函数时,queryA、queryB、queryC和functionD都会立即

注意:我知道已经有多个类似的问题被回答了,我读了它们,但是我仍然对我的场景有困难

我有一个(谷歌)Firebase云函数,它需要以一定的顺序运行许多查询,也需要在一个循环中运行。例如,类似这样的内容(使用and):

对于迭代的每个用户,
queryC
必须等待启动,直到
queryA
queryB
(可以以任何顺序运行,因此
Q.all()
)完成,
functionD
必须等待
queryC
完成

我原以为上面的代码会起作用,但当我运行云函数时,
queryA
queryB
queryC
functionD
都会立即启动

唯一对我有效的承诺是在最后运行一次的最终逻辑,它正在等待
queryA
queryB
queryC
,和
functionD
,然后像我所希望的那样启动-但最终函数内部的逻辑使用
queryC
functionD
中为每个
用户确定的信息,因此它无论如何都不能正常工作


有什么想法吗?谢谢:)

试试,您正在调用C和D:

myPromises.push(Q.all([queryA(),queryB()]).then(queryC).then(functionD));

试试看,您正在调用C和D:

myPromises.push(Q.all([queryA(),queryB()]).then(queryC).then(functionD));

。然后(queryC())
立即调用
queryC
。。。你想要
。然后(queryC)
。。。etc-注意:任何
。然后
参数都应该是函数,而不是调用函数的结果(当然,如果被调用函数返回的函数很好,但您的函数不返回函数),在总结中-myPromises.push(Q.all([queryA(),queryB())。然后(queryC)。然后(functionD))`更接近您的预期-尽管,我确信代码可以大大简化,因为我确信
firebase
方法已经返回了一个承诺快速且未经测试(显然)重写-我在您的代码中注意到一件事
let queryA=(){
…这不是有效的javascript-所有这些代码应该是
let queryA=()=>{
还是
let queryA=function(){
也许?这都很好,我猜你的意思,我想
。然后(queryC())
立即调用
queryC
…你想要
。然后(queryC)
…等-注意:任何
。那么
参数应该是一个函数,而不是调用函数的结果(当然,如果被调用的函数返回一个非常好的函数,但您的函数不返回函数),在总结中-myPromises.push(Q.all([queryya(),queryB()])。然后(queryC)。然后(functionD))`更接近您的预期-虽然,我确信代码可以大大简化,因为我确信
firebase
方法已经返回了一个承诺快速且未经测试(显然)重写-我在您的代码中注意到一件事…
让queryA=(){
…这不是有效的javascript-所有这些代码都应该是
让queryA=()=>{
或者
让queryA=function(){
也许?这都很好,我猜你的意思,我想