首页 > 解决方案 > 数组不更新

问题描述

我正在做一些浏览器自动化并最近开始使用 javascript。目前,我对以下内容感到非常困惑:

module.exports = {
  main_page(browser) {
    var pos;
    var tmp = []; //A

    browser
      .url(myUrl)
      .waitForElementVisible('body', 1000)
      .assert.elementPresent('#id > ul > li:nth-child(1)')

      for (var i = 1 ; i <= 6; i+=1){
        browser.getText(`#id > ul > li:nth-child(${i})`, function(result){
              pos = result.value.substr(-1) //B
              tmp.push(pos)                 
            })
      }

      tmp.forEach(function(element) { //C
        console.log(element);
      });

      ...

      browser.end();
  },
}

我正在尝试推pos入我的数组tmp,以便以后可以使用它来做一些事情。

我无法理解的是为什么我的数组不A被我的代码更新B。我的 forEach atC没有记录任何内容。有人可以帮助我了解正在发生的事情或解释如何正确地做到这一点吗?

欢迎任何意见,谢谢。

标签: javascriptautomationnightwatch.js

解决方案


这篇 StackOverflow帖子的答案实际上可能就是您正在寻找的。

browser.getText 返回一个承诺,所以你应该做这样的事情

   browser.getText(`#id > ul > li:nth-child(${i})`).then(function(result){
          pos = result.value.substr(-1) //B
          tmp.push(pos)                 
        })

Promise 基本上与异步数据一起使用。查看此https://developers.google.com/web/fundamentals/primers/promises以了解有关承诺的更多信息。


推荐阅读