0

我需要从函数 t 返回一个布尔值,如下所示:

    function(t){   
        //Do Something 
        return resultBool;
    }

但是当我有一个决定结果的异步函数(CasperJS)时,我将如何使用回调来做到这一点?我尝试过这样的事情,但它似乎不起作用(我认为该函数只是返回 t.withFrame 的返回值,这始终是正确的)。

function(t){    
            function findElementInFrame(callback)
            {
                try{
                    t.withFrame("etravelframe", function(){
                        if(t.exists('#outFlight1------') == true){             
                            callback(true);           
                        } 
                        else{                                               
                            callback(false);                            
                        } 
                    });
                } catch(err){
                    //return false;
                }
            }            


            return findElementInFrame(function(bool){return bool;});

        }
4

1 回答 1

2

您的函数也需要是异步的。所以以太也接受一个回调,像这样。

function (t, callback) {
    try {
        t.withFrame("etravelframe", function () {
            if (t.exists('#outFlight1------') == true) {
                // Callbacks usually take the error as first parameter.
                // So by using null as first parameter, we notify the callback that here is no error. 
                // And that the result (if any) is available in the second argument.
                callback(null, true);
            } else {
                callback(null, false);
            }
        });
    } catch (err) {
        // also use the callback, async functions should work consistently
        callback(err);
    }
}

或者创建一个延迟对象并返回一个promise
像这样:

function (t) {
    var deferred = jQuery.Deferred()
    try {
        t.withFrame("etravelframe", function () {
            if (t.exists('#outFlight1------') == true) {
                deferred.resolve(true);
            } else {
                deferred.resolve(false);
            }
        });
    } catch (err) {
        deferred.reject(err);
    }
    return deferred.promise();
}
于 2013-09-20T14:11:53.603 回答