【问题标题】:.then() vs aysnc and await protractor.then() 与异步和等待量角器
【发布时间】:2018-11-28 15:36:06
【问题描述】:

我是量角器的新手,并且一直在阅读使用 .then() 函数的承诺链。

例如

 this.getContent = function(content) {
    return element.all(by.repeater('item in list')).filter(function(elem) {
        return elem.getText().then(function(text) {
            return text;
        });
    }).first();
};

这可以很好地获取我正在寻找的文本。但是,我该如何重构它以使用 async 和 await 而不是 .then() 函数?

每次我尝试时,我都会得到一个元素浏览器而没有文本。

提前致谢

【问题讨论】:

  • 可能值得注意的是asyncawaitthen 等的promise 没有什么不同。所以不要指望这会“让codez 更快”因为它不会。 asyncawait 只是你已经在做的语法糖
  • “这可以很好地获取我正在寻找的文本” - function(text) { return text; } 的返回值对 .filter() 调用没有任何作用。 .filter() 部分与以下内容相同:.filter(function() { return true; })
  • 是的,我从过滤器函数中删除了一些代码。所以在 await 中也可以使用 .then() 吗?

标签: javascript angularjs testing protractor


【解决方案1】:

您需要将函数标记async,这意味着在该函数内部您将执行异步任务,然后为您想要的每个任务设置等待字转换成同步的,而不是一直等待它的承诺被解决。

this.getContent = async function(content) {
  return await element.all(by.repeater('item in list')).filter(async function(elem) {
    return await elem.getText();
  }).first();
};

【讨论】:

  • 如果你要使用async/await,你为什么不在第一个函数上使用它呢? await element.all...
猜你喜欢
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
相关资源
最近更新 更多