我正在尝试运行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');
}
});
答案 0 :(得分:0)
您的问题的答案是否定的,您不能将异步函数转换为同步函数。可以找到详细的解释here
但是你可以通过使用promises使异步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;
})