将回调数据分配给变量

时间:2014-05-09 21:26:45

标签: javascript

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

这是我获取数据的地方。

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);

1 个答案:

答案 0 :(得分:7)

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

如果您要将response分配给test CAN 会在异步回调中执行此操作:

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