Chrome扩展和Angular:我可以把Chrome.runtime.sendMessage变成一个同步函数吗
Chrome extension and Angular: Can I turn chrome.runtime.sendMessage into a synchronous function?
我正在尝试运行chrome.runtime.sendMessage
以从服务器获取信息。我正在使用这些信息来确定在我的chrome扩展中显示哪个页面。问题是chrome.runtime.sendMessage是一个异步函数,它与app.config不兼容。有没有办法将chrome.runtime.sendMessage
转换为同步函数?
app.config(function($stateProvider, $urlRouterProvider) {
var rootRef = new Firebase(some url);
var user = rootRef.getAuth();
chrome.runtime.sendMessage({action: 'isDrawing'},function(res) {
if (!user) {
$urlRouterProvider.otherwise('/login');
} else if (res.isDrawing === 'true') {
$urlRouterProvider.otherwise('/draw');
} else {
$urlRouterProvider.otherwise('/main');
}
});
问题的答案是否定的,不能将异步函数转换为同步函数。详细的解释可以在这里找到
但是,您可以通过使用promise使异步api更加友好。以下是存储服务的示例:
angular
.module('core.services')
.service('chromeStorageService', ['$q', function($q) {
var $key = 'UniqueKey';
this.loadState = function() {
var deferred = $q.defer();
chrome.storage.sync.get($key, function(data) {
deferred.resolve(data[$key]);
});
return deferred.promise;
};
}]);
然后你可以使用这样的服务:
storageService.loadState().then(function (state) {
// do something with your state;
})
相关文章:
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 如何创建一个“;表单弹出框“;在chrome中右键单击时位于突出显示的单词上方
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 制作一个chrome扩展,替换css和js元素
- Chrome扩展和Angular:我可以把Chrome.runtime.sendMessage变成一个同步函数吗
- 关闭当前选项卡并打开一个新的-仅适用于Chrome
- 火狐中的多个问题,但在 chrome 中工作正常,没有一个问题
- 在Chrome扩展程序图标中创建一个切换开关,以打开/关闭JavaScript
- 从chrome扩展创建一个包含POST数据的链接
- Chrome:在用户打开一个选择后添加选项
- Chrome(Android)键盘将单词转移到js焦点更改的下一个输入
- 创建一个键盘快捷方式来启动Google Chrome扩展
- Chrome扩展-按类名将元素附加到另一个元素
- 我如何创建一个Chrome应用程序,有效地充当信息亭模式下的启动页面
- I'我试图制作一个chrome查找和替换扩展,但它赢了;不起作用
- MS Edge有一个window.chrome对象??破坏浏览器检测
- chrome.tabs.onUpdated返回了一个没有'不存在
- 创建/下载一个带有chrome扩展名的excel文件
- 创建/下载一个带有chrome扩展名的.html文件
- 我如何在谷歌chrome中调试一个以编程方式注入的JS文件