gpt4 book ai didi

Protractor :控制流和javascript事件循环有什么关系?

转载 作者:行者123 更新时间:2023-12-01 05:05:30 24 4
gpt4 key购买 nike

我很难理解 Protractor 中的控制流如何与 JS 事件循环的工作方式相关。以下是我目前所知道的:

Protractor 控制流存储在队列中返回 promise 的命令。第一个命令将在队列的前面,最后一个命令将在后面。在它前面的命令解决了它的 promise 之前,不会执行任何命令。

JS 事件循环存储异步任务(具体是回调)。直到堆栈中的所有函数都完成并且堆栈为空时才会执行回调。在运行每个回调之前,都会检查堆栈是否为空。

所以让我们以这段代码为例。该代码基本上是单击搜索按钮并发出 api 请求。然后在返回数据后,检查存储返回数据的字段是否存在。

elem('#searchButton').click(); //will execute a api call to retrieve data
browser.wait(ExpectedConditions.presenceOf(elem('#resultDataField'),3000));
expect(elem('#resultDataField').isPresent()).toBeTruthy();

所以有了这个代码,我就可以让它工作。但我不知道它是如何做到的。在这个场景中事件循环是如何应用的?

最佳答案

ControlFlow 实现的核心在 runEventLoop_ (在 Selenium 的 promise.js 实现中)。

据我了解,ControlFlow 注册了对 runEventLoop_ 的调用。使用 JS 事件循环(例如,0 秒超时或类似的)。调用 runEventLoop_可以被认为是普通事件循环的单次迭代。它注册代码以实际运行计划任务(即,实际执行您在 it 期间排队的工作)。一旦该任务完成或失败(例如,通过 Hook 其异步 promise 回调),下一次迭代 runEventLoop_已安排(请参阅 scheduleEventLoop 中对 runEventLoop_ 的调用)。

当回调最终注册新的 promise 时有一些复杂性(那些需要在旧的下一个事件之前“插入”,这是通过创建“嵌套”控制流来完成的。大多数情况下,你不应该知道这一点。)

关于 Protractor :控制流和javascript事件循环有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29262192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com