Firebase异步调用是否串行执行?第二个set调用能否先于第一个完成?
Firebase异步调用的执行顺序解析
答案很明确:Firebase 不会按串行方式处理这类异步数据库调用,你代码里的第二个set调用完全有可能比第一个先完成。
咱们拆解下背后的逻辑:
- 当你执行
var p1 = admin.database().ref(path1).set(value1);时,这个set操作已经立刻向Firebase服务器发起请求了,程序不会卡在这一行等待它完成,而是直接执行下一行创建p2的代码。 - 这两个
set请求是并行发起的,它们的完成顺序完全取决于网络传输速度、Firebase服务器的处理优先级等不可控因素——谁先到达服务器、谁先被处理完,谁就先完成,和你代码里的书写顺序没有必然联系。
至于你用的Promise.all([p1, p2]),它的作用只是等待所有传入的Promise都完成后再统一返回结果,不会改变它们的执行顺序。哪怕p2先完成,Promise.all最终返回的结果数组里,第一个元素还是p1的执行结果,第二个是p2的,顺序和你传入数组的顺序保持一致。
总结一下:你的两个set操作是并行执行的,第二个先完成是完全可能的,这属于正常的异步行为~
内容的提问来源于stack exchange,提问作者Konstantin Konopko
相关产品推荐
相关产品推荐

