首页 > 解决方案 > 如何在循环中处理 Promise

问题描述

我在下面有一段代码:

browser.sleep(2000).then(function(){
  element.all(by.xpath('one xpath')).then(function(elements){
   for(let elm of elements){
     elm.getText().then(function(text){
      if(text == "ButtonA"){
        elm.click();
      }
    })
   }
 })
});

funcB();

在 我知道funcB()之前已经执行了,我在 for 循环中使用了 Promise。elm.click()它会出错。而且我已经尝试了一些我在互联网上找到的解决方案,但到目前为止我还没有找到如何在运行elm.click()之前进行工作funcB。请帮忙!

标签: javascriptloopspromiseprotractor

解决方案


async/await如果你使用量角器而不是.then像这样,你会惊讶于小学生可以使用量角器

it('test case', async () => {
  await browser.sleep(2000)
  let elementArrayName = element.all(by.xpath('one xpath'));
  for (let i = 0; i<await elementArrayName.count(); i++) {
    let text = await elementArrayName.get(i).getText();
    if(text === "ButtonA"){
      await elementArrayName.get(i).click();
    }
  }

  // IMPORTANT!
  // I don't know what your funcB is, 
  // but I have a feeling it returns a promise and thus needs await too
  await funcB();
});

你现在喜欢你的代码吗?

所以两者都.then指示awaitjavascript停止直到promise得到解决,但第二个不需要你构建这些无尽的胡夫金字塔并保持简单、可读和可调试


推荐阅读