我一直试图弄清楚如何将值从回调设置为变量,以便我可以调用变量并访问数据,而不必将所有代码放在回调函数中。我发布了两个有效的示例,第二个有效,返回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);
答案 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