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

标签 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 存储中有数据。

最佳答案

您不能返回由 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
});

关于javascript - 获取函数内部异步函数的返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301382/

相关文章:

javascript - Chrome 打包应用程序 : Open Website in New Tab

javascript - 带有样式溢出的嵌套 div 的 jQuery 可拖动 div :auto

javascript - 为什么videojs进度条不固定

javascript - 创建自定义指令并使用 UI-bootstrap 时出现错误 'Multiple Directive Resource Contention'

javascript - AngularJS 不喜欢 a 标签

debugging - chrome-app 无法识别由 chrome 浏览器运行时正常工作的 id

javascript - 从 webview javascript chrome 应用程序中获取元素

javascript - NativeScript UI 构建器

javascript - 如何使用 Jquery 验证引擎来验证 CLEditor(html 编辑器)输入

javascript - 在angularjs中注入(inject)依赖项的可维护方式