Nodejs梦魇迭代?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (141)

我有这个代码块,

var click_data = ['.click-fgdfc', '.click-f55gc', '.click-dfgc', '.click-fg45c', '.click-fg34c'];

nightmare

  .goto(site)
  .click('#cookieUsagePopIn .closeBtn')
  .wait(1000)
  .click('[for=acceptContract]')
  .click('#submitButton')
  .wait('.myAccount')
  .goto(site)
  .wait(1000)
  .click(click_data[0])
  .wait(1000)
  .click('.logoutBtn')
  .wait('.btnSignUp')

  .end()
  .catch(error => {
    console.error('error: ', error)
  });

我想迭代部分代码,

  .goto(site)
  .click('#cookieUsagePopIn .closeBtn')
  .wait(1000)
  .click('[for=acceptContract]')
  .click('#submitButton')
  .wait('.myAccount')
  .goto(site)
  .wait(1000)
  .click(click_data[0])
  .wait(1000)
  .click('.logoutBtn')
  .wait('.btnSignUp')

因为我应该使用click_data数组click_data[0], click_data[1](可能是一个可用的计数器click_data[count])。

并且,当click_data [20]存在时它应该停止。

提问于
用户回答回答于

这样的事情应该有效。你必须为你的代码调整一下。

// index.js

const Nightmare = require('nightmare');

const nightmare = Nightmare({ show: true });
const clickData = ['#doc-info', '#cst'];

clickData.reduce((accumulator, selector) => {
    return accumulator.then((results) => {
        return nightmare.goto('https://google.com')
            .wait('body')
            .click(selector)
            .title()
            .then((result) => {
                results.push(result);
                return results;
            });
    });
}, Promise.resolve([]))
    .then((results) => {
        console.dir(results);
    })
    .then(nightmare.end)
    .catch(nightmare.end);
用户回答回答于

那些是可连接的。它是一个调用的返回值,用作后续调用的对象。所以,你可以重构a.b().c().d()p=a.b(); p=p.c(); p=p.d(); ,因此,如果你想循环c()5次模拟a.b().c().c().c().c().c().d()

做这个:

var p = a.b();
for (let i = 0; i < 5; ++i) {
  p = p.c();
}
p = p.d();

扫码关注云+社区

领取腾讯云代金券