阵列未更新

时间:2018-11-25 22:52:49

标签: javascript automation nightwatch.js

我正在做一些浏览器自动化工作,并且最近开始使用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上的数组。我在C的forEach没有记录任何内容。有人可以帮助我了解正在发生的事情或解释如何正确进行吗?

欢迎任何输入,谢谢。

1 个答案:

答案 0 :(得分:0)

此StackOverflow post的答案实际上可能就是您要寻找的。

browser.getText返回一个promise,因此您应该执行类似的操作

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

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