javascript - getting the return data of a async function inside a function

前端 未结 2 1046
南旧
南旧 2021-01-05 15:57

I am having a problem because chrome api functions are async and I cant get its return value. Consider the following code. I am using angularjs

             


        
相关标签:
2条回答
  • 2021-01-05 16:42

    Another way is to use a promise. In this case it might not matter but if you have a a lot of nested callbacks then a promise is better.

    $scope.storageGet = function(param) {
        var deferred = $q.defer();
    
        chrome.storage.local.get(param.storageName, function(data) {
            deferred.resolve(data);
        });
    
        return deferred.promise;
    };
    

    And then you call it like this.

    $scope.storageGet(param).then(function (data) {
    
    });
    
    0 讨论(0)
  • 2021-01-05 16:43

    You cannot return data that is generated by an async function such as chrome.storage.local.get, because more likely your function will finish executing before the async function executes. This is why your function returns undefined, which is the default value of returnData.

    A good alternative will be to make your function async as well by using a callback function.

    $scope.storageGet = function(param, callback) {
        chrome.storage.local.get(param.storageName, function(data) {
            callback(data);
        });
    };
    

    Now you can call your function this way:

    $scope.storageGet(param, function(returnData) {
        // do something with returnData
    });
    
    0 讨论(0)
提交回复
热议问题