javascript - 将回调数据分配给变量

标签 javascript

<分区>

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

这是我获取数据的地方。

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

最佳答案

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

如果您想将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 

关于javascript - 将回调数据分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574256/

相关文章:

javascript - 使用 if num_rows,但 else 不会运行

javascript - 我可以使用 React 应用程序作为静态 HTML 页面上的组件吗

Javascript `nextElementSibling` 来自 IE 中未定义的注释

javascript - 如何将 react 组件呈现给另一个网络应用程序

javascript - 对字符串执行简单的数字测试

javascript - 适用于稍后插入的元素的钩子(Hook)

javascript - Phonegap 下载 html 文件并替换它(来源)

javascript - 单击按钮一次显示一个列表

Opera 中的 Javascript location.replace 错误

javascript - phonegap 相机未将图像加载到 <img> 标签中