如何使用nodejs和zombie.js的promises进行循环

时间:2015-11-27 09:30:44

标签: node.js zombie.js

我正在使用zombie.js,我需要点击一个按钮,直到该按钮在"样式"中有一些文字。属性(每次点击后按钮都会改变)。

我使用这种结构。

     browser
    .visit(url)
    .then(function() {    
        console.log("Scraping ...");            
        ...
    })
    .then(function() {
        var button = browser.query([SELECTOR]);             
        if(button != null)
        {
            if(button.outerHTML.indexOf([TEXT_TO_SEEK]) == -1)
            {
                console.log("Click more button");
                return browser.pressButton([SELECTOR]);
            }                       
        }
        return;
    })

它有效一次,但是我想要执行n次,直到条件满足为止。

1 个答案:

答案 0 :(得分:0)

这个递归对我有用:

browser
    .visit(url)
    .then(function () {
        console.log('Scraping ...');
        //...
    })
    .then(function () {
        var maxClicks = 10;
        return (function pressIt() {
            if (maxClicks-- <= 0) {
                throw new Error('Usless button');
            }

            var button = browser.query([SELECTOR]);
            if (!button) {
                throw new Error('There is no button');
            }

            if (button.outerHTML.indexOf([TEXT_TO_SEEK]) == -1) {
                console.log('Click more button');
                return browser.pressButton([SELECTOR]).then(pressIt);
            } else {
                return 'This button rocks';
            }
        })();
    }).then(console.log, console.error);

输出:

"Scraping ..."
"Click more button"
"Click more button"
"Click more button"
"This button rocks"