加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS:在服务中链接http承诺$q

发布时间:2020-12-17 07:27:08 所属栏目:安全 来源:网络整理
导读:当谈到 angularjs中的$http承诺时,我遇到了问题.我在我的服务中这样做:( getSomething函数应链接两个promise) 第二个函数使用外部回调函数! app.service('blubb',function($http,$q) { var self = this; this.getSomething = function(uri,data) { return s
当谈到 angularjs中的$http承诺时,我遇到了问题.我在我的服务中这样做:( getSomething函数应链接两个promise)

第二个函数使用外部回调函数!

app.service('blubb',function($http,$q) {

  var self = this;

  this.getSomething = function(uri,data) {
    return self.getData(uri).then(function(data2) {
      return self.compactData(uri,data2);
    });
  };

  this.getData = function(uri) {
    var deferred = $q.defer();
    $http.get(uri).success(function(data) {
      deferred.resolve(data);
    }).error(function() {
      deferred.reject();
    });

    return deferred.promise;
  };

  this.compactData = function(uri,data) {
    var deferred = $q.defer();
    /* callback function */
      if(!err) {
        console.log(compacted);
        deferred.resolve(compacted);
      } else {
        console.log(err);
        deferred.reject(err);
      }
    /* end of function */

    return deferred.promise;
  };
});

当我在我的控制器中使用该服务时,它不会输出console.log:

blubb.getSomething(uri,input).then(function(data) {
  console.log(data)
});

编辑:
如果我自己在’compactData’中定义回调函数它可以工作,但我使用https://raw.github.com/digitalbazaar/jsonld.js/master/js/jsonld.js的“jsonld.compact”,这不起作用!

    jsonld.compact(input,context,function(err,compacted) {
      if(!err) {
        console.log(compacted);
        deferred.resolve(compacted);
      } else {
        deferred.reject('JSON-LD compacting');
      }
    });

我在jsonld.compact中获取console.log输出,但解决方案不起作用,我不知道为什么..

它只适用于$rootScope.$apply(deferred.resolve(compacted));

我正在使用这样的链接承诺:
$http.get('urlToGo')
                .then(function(result1) {
                    console.log(result1.data);
                    return $http.get('urlToGo');
                }).then(function(result2) {
                    console.log(result2.data);
                    return $http.get('urlToGo');
                }).then(function(result3) {
                    console.log(result3.data);
                });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读