Promise.all中多个Promise的开始执行顺序的问题?
从日志输出来看 先执行了p1后执行p2,
问题
1.Promise.all的参数接受一个Promise数组, Promise数组中每一个Promise的执行函数的 开始执行顺序是怎样的?是按照数组中的顺序 开始执行每一个Promise的执行函数吗?从实际日志输出来看 好像是数组的倒序(注意问题问题的是Promise的执行函数的 开始执行顺序,并不是Promise的完成顺序,仅仅是执行函数的开始实行顺序)
- 实际Promise.all的场景中参数Promise数组中的每一个Promise之间应该是没有依赖性的吧?
我有一个场景: 做一个爬虫,点击登录按钮,页面发生跳转。我需要等待登录请求和页面跳转这两个事件的执行完成。在 puppeteer API的写法如下
const [response] = await Promise.all([
page.waitForNavigation(waitOptions),
page.click(selector, clickOptions),
]);
我对这个写法的疑问是: 正常情况下是 点击按钮先执行,然后才会发生页面的跳转,等待页面的跳转完成,也就是这两个Promise之间的执行函数有顺序要求, 这种写法合理吗?
b
回复
1个回答
test
2024-06-23
- promise 实例化之后立即开始执行,所以应该和实例化的顺序有关,和数组内顺序无关。如果是直接在数组里实例化,那就是数组正序。
- 你所说的用例里明显存在先后顺序,自然不能用
Promise.all
,应该await
两次。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容