关于Playwright中Promise.all返回值及Page方法调用的疑问
核心问题拆解与解答
Promise.all 的用法(含代码冗余点说明)
Promise.all 的作用是接收一组 Promise 组成的数组,返回一个新 Promise。只有当数组内所有 Promise 都成功 resolve 后,新 Promise 才会 resolve,结果是一个包含所有 Promise 返回值的数组。
不过这段代码里用 Promise.all 属于冗余写法——因为数组里只放了一个已经加了 await 的 Promise(await this.context.waitForEvent("page")),直接写const newWindow = await this.context.waitForEvent("page")完全等价,且代码更简洁。const [newWindow] 的类型解析
这里是数组解构语法:由于 Promise.all 返回的是数组(哪怕仅含一个元素),[newWindow]就是把数组的第一个元素赋值给 newWindow 变量。
你可能看错了 Playwright 文档——browserContext.waitForEvent("page")监听的是page事件,当该事件触发时,事件参数就是一个Page 实例,所以这个方法返回的类型是Promise<Page>,await 后得到的就是 Page 对象,因此 newWindow 的类型就是 Page。newWindow 可调用 waitForLoadState() 的原因
因为 newWindow 本身就是 Page 实例,而waitForLoadState()是 Page 类的内置方法,自然可以直接调用。Playwright 的 Page 对象提供了一系列页面操作方法,你看到的newWindow.title()同样是 Page 的内置方法。
内容的提问来源于stack exchange,提问作者msmith1114

