javascript - Angular promise : get data from buffer if available

标签 javascript angularjs

在此场景中,如果数据不在缓冲区中,则要求通过 Http 请求获取数据。如果它在缓冲区中,则从那里使用它,而不需要 Http 请求。

我尝试了下面的代码,但没有多大意义;如果数据在缓冲区中,我不知道是否应该从函数返回而不执行任何操作或返回延迟的 promise 。有什么想法吗?

  var dataBuffer = null;

  var getData = function() {

     var deferred = $q.defer();

     if (dataBuffer != null) {  // this is the part I'm not convinced
         deferred.resolve();
         return;
     }  


     $http.get('/some/url/')
       .success(function(data) { 
               dataBuffer = data;
               deferred.resolve();
       })
       .error(function(data) {
               deferred.reject();
       });

     return deferred.promise;
  };

通过以下方式调用:

     var promise = getData();
     promise.then (
           function(response) { 
              dataBuffer = .... // dataBuffer contains data
              }
           );

最佳答案

当您不确定正在执行的代码是否异步时,有一种干净简单的方法可以使用 Promise,并且它使用 $q.when 所以代码可以是:

var getData = function() {
    return $q.when(dataBuffer ? dataBuffer: $http.get('/some/url')) 
};

然后,在调用 getData 时,您可以使用您发布的相同代码,或者只是简单地使用:

getData()
       .then(function(response){//... 
       })
       .catch(function(err){//..
       });

关于javascript - Angular promise : get data from buffer if available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749511/

相关文章:

javascript - 使用本地json文件查找key :value using javascript

javascript - Safari 和 Firefox 中的 javascript Date() 问题

javascript - CodeIgniter 和 Javascript url 重写冲突

javascript - 使用 ng-repeat 生成表体行

javascript - 将本地数据与 Angular 资源一起使用

javascript - 使用 Azure 平台访问数组位置在 JavaScript 中返回未定义

javascript - 使用特定路径和命名空间连接到 Socket.IO 服务器

javascript - 语法错误 : Token 'mod' is unexpected, 期望 [:] at column 12 of the expression [partials/{{mod}}. html] 从 [mod}}.html] 开始

javascript - select 的默认选项不适用于 bool 值

javascript - 带有csrf token 的Angular SpringBoot SpringSecurity应用程序Ajax POST在未定义 token /头时失败