我一直试图弄清楚如何将值从回调设置为变量,以便我可以调用变量并访问数据,而不必将所有代码放在回调函数中.我发布了两个有效的示例,第二个有效,返回undefined.我怎样才能使第二个例子有效?
这是我获取数据的地方.
var chromeApi = {
msg: function (callbacks) {
chrome.runtime.sendMessage({type: "settings"}, callbacks);
}
};
Run Code Online (Sandbox Code Playgroud)
当我从chromeApi这种方式访问数据时它工作正常.
chromeApi.msg(function (response) {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
但我想以这种方式访问它我未定义.如何使我的代码能够使用此方法?
var test = chromeApi.msg(function (response) {
return response;
});
console.log(test);
Run Code Online (Sandbox Code Playgroud)
欢迎来到异步编程的世界.:)
如果你想分配response给test你CAN异步回调中这样做:
chromeApi.msg(function (response) {
test = response;
});
console.log(test);
Run Code Online (Sandbox Code Playgroud)
但是 ......因为回调是异步的(意味着我们不知道该赋值语句何时会实际执行)我们不知道是否
test = response;
Run Code Online (Sandbox Code Playgroud)
之前执行
console.log(test)
Run Code Online (Sandbox Code Playgroud)
直到运行时.
我从上面的代码猜测console.log(test)将会在之前执行test = response(但是,由于异步编程表现出非确定性行为,因此每次都不会发生相同的执行顺序).
根据您对响应值的要求,将决定是否需要在回调中完成.
这保证有效
chromeApi.msg(function (response) {
test = response;
// do something with test
});
Run Code Online (Sandbox Code Playgroud)
这不是
chromeApi.msg(function (response) {
test = response;
});
//do something with test
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10838 次 |
| 最近记录: |