我有一个函数authenticate(),该函数使用$ post()从服务器检索会话密钥。我相信$ post是一个异步调用。每当我在脚本中执行任何操作时,我都想确保自己有一个sessionKey,如果我没有sessionKey,我想验证()。我的问题是调用authenicate()之后如何运行performTask()?

function foo() {
    if (sessionKey) {
        performTask();
    } else {
        authenciate();
        performTask();
    }
}

function authenticate() {
    $.post(url, function(data) {
        sessionKey = data.sessionKey;
    });
}


编辑:我也不想放入authenticate()的回调函数performTask(),因为将从多个不同的函数调用authenticate()。

最佳答案

您可以将回调传递给authenticate方法。如果从20个不同的地方调用了authenticate,则可以传入20个不同的回调方法。

function foo() {
    if (sessionKey) {
        performTask();
    } else {
        authenciate(function() {
           performTask();
        });
    }
}

function authenticate(callback) {
    $.post(url, function(data) {
        sessionKey = data.sessionKey;
        if (callback) callback();
    });
}

10-05 23:22