如何从扩展的casperjs函数返回值?

时间:2014-09-05 23:01:53

标签: javascript casperjs

我试图从下面的函数返回一个值,如此。

html = casper.get_HTML(myselector);

我得到的所有回复都是"未定义" (return_html)。然而,' html'变量正确设置。全部功能正常工作。它只是返回值的问题。

你是怎么做到的?

casper.get_HTML = function(myselector) {
    var return_html;

    casper.waitForSelector(myselector,
        function() {
            var html = casper.getHTML(myselector, false);
            return_html = html;                                     //got the html
        },
        function() {                                                // Do this on timeout
            return_html = null;
        },
       10000                                                       // wait 10 secs
    );

    return return_html;
 };

1 个答案:

答案 0 :(得分:1)

在CasperJS中,所有then*和所有wait*函数都是异步的步进函数。这意味着您无法返回在自定义函数中异步确定的内容。你必须使用回调:

casper.get_HTML = function(myselector, callback) {
    this.waitForSelector(myselector,
        function then() {
            var html = this.getHTML(myselector, false);
            callback(html);
        },
        function onTimeout() {
            callback();
        },
        10000 // wait 10 secs
    );
    return this; // return this so that you can chain the calls
};

casper.start(url).get_HTML("#myid", function(html){
    if (html) {
        this.echo("success");
    } else {
        this.echo("failed");
    }
}).run();