Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

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

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

        return returnData;
    };

And when I tried to call it like this:

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

It prints 'undefined' in the console. What I want to see is the obect of users stored in chrome storage. Well, I'm sure that I have data in chrome storage.

like image 480
boi_echos Avatar asked Aug 14 '14 06:08

boi_echos


1 Answers

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
});
like image 98
Tzach Avatar answered Sep 18 '22 12:09

Tzach