【问题标题】:how to use angular and JavaScript promises to return some data?如何使用 Angular 和 JavaScript 承诺返回一些数据?
【发布时间】:2014-09-30 05:02:13
【问题描述】:

我正在尝试从本地存储中获取一些数据,但我想使用一次日期为ready。类似:

// this belongs to a Helper factory
getData: function(){
        var deferred = jQuery.Deferred();
        setTimeout(function(){
            var data = {
                description: localStorageService.get('description'),
            };
            deferred.resolve()
        }, 10);
        return deferred.promise();
  },

// I set it up so that in the controller I can do
// $scope.data = Helper.getData();

与我的示例类似,我只想返回 data 对象,一旦它具有来自 localstorage 的 description

我正在使用 angularjs,所以一旦承诺得到解决,我想在我的视图中显示 {{data}}。比如可能使用ng-hide 或类似的东西。

无论如何,我的问题是关于建立这个承诺。

有什么想法吗?

【问题讨论】:

  • 旁注,如果你使用 angular,不要使用 jQuery.Deferred,(实际上,作为一般规则,不要使用 jQuery.Deferred)$q 是一个更好的 promise 库。
  • @Retsam。我愿意接受任何好的解决方案

标签: javascript angularjs local-storage jquery-deferred angular-promise


【解决方案1】:

$q 是通常用于处理 angularjs 中的承诺的库,因为您正在从本地存储读取,这是一个同步操作,我不确定您为什么要返回承诺,通常是这样然而,在角度完成是这样的:

getData: function(){
   var deferred = $q.defer();
   $timeout(function(){
     var data=localStorageService.get('description'),
     deferred.resolve(data);
   },3000);
   return deferred.promise;
}

用法:

getData().then(function(data){
   console.log(data);
})

【讨论】:

  • 为什么要3000,如果获取数据需要更长的时间怎么办?
  • @Patrioticcow 3000 只是向您展示承诺将如何在一段时间后返回,正如我所说,如果我没记错的话,从本地存储读取不是异步操作,无论如何,根据我的经验,var data=localStorageService.get('description'), 行应该立即返回。
  • 你听说本地存储也不是异步的,但我的经验说不同。可能是因为我的代码设置方式
  • @Patrioticcow 我已经使用this component 有一段时间了,它可以同步处理所有事情。
  • 我建议摆脱超时。它所做的只是延迟开始获取数据所需的时间。
【解决方案2】:

$timeout() 返回一个承诺,所以这是可行的:

getData: function(){
   return $timeout(function(){
       return localStorageService.get('description'),
   },3000);
}

用法:

getData().then(function(data){
   console.log(data);
})

【讨论】:

    猜你喜欢
    • 2018-10-19
    • 2016-10-09
    • 2014-08-31
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2016-08-18
    • 2023-01-27
    • 2015-11-27
    相关资源
    最近更新 更多