【问题标题】:assign callback data to a variable [duplicate]将回调数据分配给变量[重复]
【发布时间】:2014-06-27 18:18:33
【问题描述】:

我一直在尝试弄清楚如何将回调中的值设置为变量,以便我可以调用变量并访问数据,而不必将所有代码放在回调函数中。我发布了两个示例,一个有效,第二个有效并返回未定义。我怎样才能使第二个示例有效?

这是我获取数据的地方。

var chromeApi = {
    msg: function (callbacks) {
        chrome.runtime.sendMessage({type: "settings"}, callbacks);
    }
};

当我以这种方式从chromeApi 访问数据时,它工作正常。

chromeApi.msg(function (response) {
    console.log(response);
});

但我想以这种方式访问​​它,但我无法定义。如何使我的代码工作以使用此方法?

var test = chromeApi.msg(function (response) {
    return response;
});
console.log(test);

【问题讨论】:

    标签: javascript


    【解决方案1】:

    欢迎来到异步编程的世界。 :)

    如果您想将response 分配给test,您可以在异步回调中这样做:

    chromeApi.msg(function (response) {
        test = response;
    });
    console.log(test);
    

    但是...因为回调是异步的(这意味着我们不知道该赋值语句何时实际执行)我们不知道是否

    test = response;
    

    在之前执行

    console.log(test)
    

    直到运行时。

    我从上面的代码中的猜测是console.log(test) 将在test = response 之前执行(但是,由于异步编程表现出非确定性行为,因此可能不会每次都发生相同的执行顺序)。

    根据您要对响应值执行的操作,将决定是否需要在回调中完成。

    这保证有效

    chromeApi.msg(function (response) {
        test = response;
        // do something with test
    });
    

    这不是

    chromeApi.msg(function (response) {
        test = response;
    });
    //do something with test 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多