javascript - 获取函数内异步函数的返回数据

时间:2014-08-14 06:26:12

标签: javascript angularjs google-chrome-app

我遇到了问题,因为chrome api函数是异步的,我无法获得其返回值。请考虑以下代码。 我正在使用angularjs

    $scope.storageGet = function(param) {
        var returnData; 

        chrome.storage.local.get(param.storageName, function(data) {
            returnData = data;
        });

        return returnData;
    };

当我试图这样称呼它时:

    console.log($scope.storageGet({'storageName': 'users'}));

它在控制台中打印'undefined'。我想看到的是存储在chrome存储中的用户的对象。好吧,我确信我有chrome存储数据。

2 个答案:

答案 0 :(得分:6)

您无法返回由chrome.storage.local.get等异步函数生成的数据,因为您的函数更有可能在执行异步函数之前完成执行。这就是您的函数返回undefined的原因,returnData$scope.storageGet = function(param, callback) { chrome.storage.local.get(param.storageName, function(data) { callback(data); }); }; 的默认值。

一个很好的选择是通过使用回调函数使你的函数同步。

$scope.storageGet(param, function(returnData) {
    // do something with returnData
});

现在你可以用这种方式调用你的函数:

{{1}}

答案 1 :(得分:6)

另一种方法是使用承诺。在这种情况下,它可能无关紧要,但如果你有很多嵌套回调,那么承诺会更好。

$scope.storageGet = function(param) {
    var deferred = $q.defer();

    chrome.storage.local.get(param.storageName, function(data) {
        deferred.resolve(data);
    });

    return deferred.promise;
};

然后你这样称呼它。

$scope.storageGet(param).then(function (data) {

});