JavaScript 异步返回值/使用 jQuery 赋值[重复]

2024-03-12

我有以下 jQuery 函数。我正在尝试返回此处显示的 GUID 值alert();警报工作正常并且值已填充,但是我似乎无法将其分配给变量并返回其值。

最终我需要访问其他函数中的GUID值等。我尝试过的所有内容都仅显示为undefined.

我想做这样的事情:

function trackPage(){
    var elqTracker = new jQuery.elq(459);
    elqTracker.pageTrack({
        success: function() {
            elqTracker.getGUID(function(guid) {
                alert(guid);
                var returnValue = guid;
            });
        }
    });
    return returnValue;
}

var someGuid = trackPage();

所以,这个问题已经被问过一百万次了,我相信每个人(包括我自己)尝试过一次 http://fixingthesejquery.com/#slide42.

这只是异步调用的本质,您不能将它们的结果用作return价值。这就是为什么他们让你传入一个函数来获取调用结果,但他们不能return它要么!另请注意,elqTracker.pageTrack()函数调用立即返回,因此你的returnValue简直就是undefined.

大多数人(参见 dfsq 的回答)通过引入回调函数作为参数来解决这个问题。这个方法已经被尝试过,并且是正确的——但是 jQuery 有$.Deferred http://api.jquery.com/category/deferred-object/。这允许您使自己的异步逻辑返回promise然后您可以将任意数量的回调附加到:

function trackPage(){
    var elqTracker = new jQuery.elq( 459 ),
        dfd = $.Deferred();

    elqTracker.pageTrack({
        success: function() {
            elqTracker.getGUID(function( guid ) {
                dfd.resolve( guid );
            });
        }
    });

    return dfd.promise();
}

// example use:
trackPage().done(function( guid ) {
    alert( "Got GUID:" + guid );
});

现在请注意,您的trackPage()返回一个可以附加回调的对象?您也不必立即附加它们。

var pageHit = trackPage().done(function( guid ) {
    alert( "Page Hit GUID:" +guid );
});

$("button").click(function() {
    pageHit.done( function( guid ) {
        alert( "Clicked on Page GUID:" + guid );
    });
});

另外,jQuery AJAX 模块也总是返回 Promise,因此,如果您制定自己的逻辑返回 Promise,那么所有 AJAX 内容的界面应该非常相似。


作为旁注:我想指出的是,您的var returnValue无论如何,都是在错误的“范围”内。它需要在外部范围内声明trackPage功能。即使进行了此修复,这个概念仍然不起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 异步返回值/使用 jQuery 赋值[重复] 的相关文章