【问题标题】:Updating a global variable with a value thats in a function; which is stored in a variable [duplicate]用函数中的值更新全局变量;它存储在一个变量中[重复]
【发布时间】:2015-07-21 23:55:53
【问题描述】:
function event() {

    var hold = "";

    var oArgs = {
        page_size: String(pgsize)
    };

    var wow = EVDB.API.call("/events/search", oArgs, ow = function(oData) {

        hold = oData.events.event[0].description

        return console.log(hold);

    });

    $("#shower").append("<li>" + hold + "</li>");

}

我希望 id 淋浴保存我的 console.log 中的值。它只是输出 目前未定义,我知道我可以简单地在'ow' 中附加'hold',但我的意图是返回'hold' 值并在不同于event() 的外部函数中使用它。

【问题讨论】:

  • 异步编程不是这样工作的。在您的回调中执行此操作,或使用某种形式的承诺等。
  • 谢谢!请详细说明...问题是当我处于该函数(oData)的执行上下文中时,我无法真正更新全局变量。还是根本不可能?我有点迷茫,一个promise,如angular?
  • 你不是已经这样做了吗?所以不,我的意思是你应该在回调中做你的 jQuery 工作。 (此外,您当前正在返回调用 console.log 的值,这似乎没用。)承诺,就像任何承诺一样——它们在 AngularJS 之外使用。
  • 是的,我可以在回调中做到这一点,我更愿意获取该值并完全在一个新函数中使用它,我该如何返回它,这就是我要问的。因为我可以在我的控制台中看到我想要的值但是我如何使用这个值
  • 我会考虑退后一步,把你的头放在像这样的调用的异步性质上,或者只是一般的。

标签: javascript jquery arrays function global-variables


【解决方案1】:

在异步编程中,唯一可以可靠使用异步操作结果的地方是在传递该结果的回调内部。这是因为被调用的异步在未来某个不确定的时间被调用,同时其他代码继续运行。此外,您也不能从异步回调中返回值。

所以,你可以这样做:

function event() {
    var oArgs = {page_size: String(pgsize)};
    EVDB.API.call("/events/search", oArgs, function(oData)
        $("#shower").append("<li>" + oData.events.event[0].description + "</li>");
    });
}

我还删除了对this 的所有引用,因为在此函数中没有明确的对象创建可以为您提供this 的适当上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-06
    • 2020-10-02
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多