Javascript这是一个有效的电话?

时间:2011-06-14 19:41:30

标签: javascript

我知道在javascript中从return获取webmethods数据时此代码有效,但是如果它是从另一个js方法返回的呢?

alert永远不会运行,所以我想不,但我想确保它是这个而不是其他代码抛出错误:

function previousWinner() {
    //Webservice call
    services.isUserAWinner(ID, events, function (response) {
           //Code

            //Return
            return true;
        }
        //Return
        return false;
    });
}

稍后在我的代码中我称之为

  previousWinner(function (response) {
        alert(response);
        //Check to see if user is a winner
        if (!response) {
            //Check likes
            hasUserLiked();
        }
    });

previousWinner(function (response) {仅适用于网络方法调用吗?

3 个答案:

答案 0 :(得分:0)

第二个示例是将引用传递给函数本身而不是结果。如果你想内联调用它,你可以这样做:

  previousWinner((function (response) {
        alert(response);
        //Check to see if user is a winner
        if (!response) {
            //Check likes
            hasUserLiked();
        }
    })());

编辑:在“webmethods”的情况下,我假设你的意思是AJAX调用,你传递的函数的引用在请求返回时用作回调函数。这就是使它异步的原因(AJAX中的A)。

答案 1 :(得分:0)

这就是你应该如何定义previousWinner,其中'code'是一个告诉你运行回调的布尔值。

function previousWinner(callback) {
    //Webservice call
    services.isUserAWinner(ID, events, function (response) {
        //Code
        var code = response == true; // if response is a boolean this will work, otherwise you need to run some other type of conditional 
        if (code && callback) {
            callback(response);
            //Return
            return true;
        }
        //Return
        return false;
    });
}

答案 2 :(得分:0)

从你的previousWinner定义

,该函数不带参数,因此任何一个调用都是等价的:

previousWinner();
previousWinner(1);
previousWinner(1,2,3,4,5,6);
previousWinner(function(){},function(){});
// and so on

在第二个示例中,您似乎希望提供回调作为参数 如果是这种情况,您应该考虑将功能重新定义为:

function previousWinner(callback) {
    //Webservice call
    services.isUserAWinner(ID, events, function (response) {
            //Code
            if(typeof callback == 'function')
                callback(response);
            //return whatever you want
    });
}