两个javascript函数,第二个等待第一个使用getScript从外部URL检索值

Two javascript functions, the second one waits for the first to retrieve a value using getScript, from an external URL

本文关键字:getScript 从外部 URL 检索 第一个 函数 javascript 第二个 等待 两个      更新时间:2023-09-26

也许你可以用一种优雅的方式将两个函数链接在一起。

  1. 第一个使用"getScript"从外部 URL 检索值。
  2. 第二个,等待第一个函数。 获取该值并执行随之而来的东西。

这是我尝试过的,除了等待部分(他们最难看)之外,一切都应该工作:)

为了更好地理解,我已经注释了代码:

/**
 * Test Class.
 */
 var Test = function() {
    var cookieEmail;
    this.init = function() {
        var script = 'http://www.script.com';
        jQuery.getScript(script, function(){
            cookieEmail = typeof (functionOnScriptCom) == 'undefined' ? '' : functionOnScriptCom('V_ElqEmailAddress');
        }
    }
    this.init2 = function(){
        // I want to do something with the variable "cookieEmail", after it has been retrieved using getScript.
        cookieEmail = cookieEmail.toLowerCase();
    }
 }
 jQuery(document).ready(function(){
    var test = new Test();
    test.init();
    // I need a way to wait for -- test.init -- getScript function to retrieve the ---cookieEmail--- value.
    // When cookieEmail's value has been retrieved, I want to be able to call:
    test.init2();
 });

好吧,它不会等待,因为getScript是一个异步调用,所以你应该修改init()接受回调函数,然后在该回调中运行init2

this.init = function(callback) {
    var cookieEmail;
    var script = 'http://www.script.com';
    jQuery.getScript(script, function(){
        cookieEmail = typeof (functionOnScriptCom) == 'undefined' ? '' : functionOnScriptCom('V_ElqEmailAddress');
        callback(cookieEmail);
    }
}
//Modify init2 to accept a param
this.init2 = function(cookieEmail){

现在您可以执行以下操作:

test.init(function(data) {
    init2(data);
}

我会将回调传递给init函数,该回调将在getScript成功执行后执行。 像这样:

var Test = function() {
    var cookieEmail;
    this.init = function( callback ) {
        var script = 'http://www.script.com';
        jQuery.getScript(script, function(){
            cookieEmail = typeof (functionOnScriptCom) == 'undefined' ? '' : functionOnScriptCom('V_ElqEmailAddress');
            callback();
        }
    }
    this.init2 = function(){
        // I want to do something with the variable "cookieEmail", after it has been retrieved using getScript.
        cookieEmail = cookieEmail.toLowerCase();
    }
}
jQuery(document).ready(function(){
    var test = new Test();
    test.init( function() { test.init2(); });
});

来自 AJAX(包括getScript JSONP)的响应始终是异步的。所以使用承诺模式:

var test = {
    init: function() {
        var script = 'http://www.script.com';
        return jQuery.getScript(script).then(function(){
            return typeof (functionOnScriptCom) == 'undefined' ? '' : functionOnScriptCom('V_ElqEmailAddress');
        });
    },
    init2: function(promise){
        return promise.then(function(cookieEmail) {
            // do something with `cookieEmail` when it has arrived
            return cookieEmail.toLowerCase();
        });
    }
};
test.init2(test.init());