0

次のように、関数 t からブール値を返す必要があります。

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

しかし、結果を決定する非同期関数 (CasperJS) がある場合、コールバックを使用してこれを行うにはどうすればよいでしょうか? 私はこのようなことを試しましたが、うまくいかないようです (関数は単に t.withFrame の戻り値を返しているだけだと思いますが、これは常に true です)。

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

関数も非同期である必要があります。このように、ether もコールバックを受け入れます。

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);
    }
}

または、Defferedオブジェクトを作成して 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 に答える