Javascript是一个无效的调用

Javascript is this a vaild call?

本文关键字:一个 无效 调用 Javascript      更新时间:2023-09-26

我知道在javascript中从webmethods获取return数据时,这段代码是有效的,但如果它是另一个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) {是否仅适用于web方法调用?

这就是您应该定义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;
    });
}

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

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

EDIT:在"webmethods"的情况下,我认为你指的是AJAX调用,当请求返回时,你会传递一个对函数的引用,用作回调。这就是它异步的原因(AJAX中的A)。

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