Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用angular和JavaScript承诺返回一些数据?_Javascript_Angularjs_Local Storage_Jquery Deferred_Angular Promise - Fatal编程技术网

如何使用angular和JavaScript承诺返回一些数据?

如何使用angular和JavaScript承诺返回一些数据?,javascript,angularjs,local-storage,jquery-deferred,angular-promise,Javascript,Angularjs,Local Storage,Jquery Deferred,Angular Promise,我正试图从本地存储中获取一些数据,但我想在就绪时使用日期。比如: // this belongs to a Helper factory getData: function(){ var deferred = jQuery.Deferred(); setTimeout(function(){ var data = { description: localStorageService.get('descript

我正试图从本地存储中获取一些数据,但我想在
就绪时使用日期。比如:

// 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();
与我的示例类似,我只想在从localstorage获得
描述
后返回
数据
对象

我使用的是angularjs,所以我想在承诺解决后在我的视图中显示
{{{data}}
。比如可以使用
ng hide
或类似的东西

在任何情况下,我的问题都是关于设定承诺


有什么想法吗?

好的
$q
是angularjs中通常用于处理承诺的库,因为您正在从本地存储读取,这是一个同步操作,我不确定您为什么要返回承诺,在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);
})
getData().then(function(data){
   console.log(data);
})
$timeout()返回一个承诺,因此它可以工作:

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

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

旁注,如果您使用angular,请不要使用jQuery.Deferred(实际上,作为一般规则,不要使用jQuery.Deferred)$q是一个更好的promise库。@Retsam。我愿意接受任何好的解决方案为什么
3000
,如果需要更长的时间来获取数据呢?@Patrioticcow 3000只是为了向您展示一段时间后承诺的内容将如何返回,正如我所说的,如果我没有弄错的话,从本地存储读取不是一个异步操作,行
var data=localStorageService.get(“说明”),
无论如何,根据我的经验,应该会立即返回。你听说本地存储也不是异步的,但我的经验表明不同。可能是因为我的代码的方式不同setup@Patrioticcow我已经使用了一段时间,它可以同步处理所有事情。我建议取消超时。它所做的只是延迟所需的时间开始获取数据。