Node.js 如何使用Firebase DB异步回调在嵌套循环中链接Q延迟承诺
注意:我知道已经有多个类似的问题被回答了,我读了它们,但是我仍然对我的场景有困难 我有一个(谷歌)Firebase云函数,它需要以一定的顺序运行许多查询,也需要在一个循环中运行。例如,类似这样的内容(使用and): 对于迭代的每个用户,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都会立即
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(){
也许?这都很好,我猜你的意思,我想