Angular 承诺和$q

Angular 承诺和$q,angular,Angular,我有以下代码。我正在寻找Angular 5中的promise和$q模块,但没有找到任何有用的详细信息。下面的代码是用AngularJS和Javascript编写的 我想把这个代码转换成Angular 5和TypeScript。 这是一个模拟数据的模拟服务: angular.module('reports.appActivity').factory('AppActiveMockServices', ['$q', function ($q) { var appActivi

我有以下代码。我正在寻找Angular 5中的promise和$q模块,但没有找到任何有用的详细信息。下面的代码是用AngularJS和Javascript编写的

我想把这个代码转换成Angular 5和TypeScript。 这是一个模拟数据的模拟服务:

angular.module('reports.appActivity').factory('AppActiveMockServices', ['$q',
    function ($q) {    
      var appActivity;

      function loadappActivity(params) {
        var deferred = $q.defer(),
          cancel = function (reason) {
            deferred.resolve(reason);
          };
        injectappActivity(params);

        deferred.resolve(appActivity);
        return {
          promise: deferred.promise,
          cancel: cancel
        };
      }

      function injectappActivity(params) {
        var total = Math.floor((Math.random() * 100)),
          someUsage = total - Math.floor((Math.random() * 80)),
          tempValue,
          maxIndex = 0,
          deltaTime=0,
          daysSelected,
          timeBegin,
          timeEnd,
          d = new Date(),
          dayInmilliseconds;

        appActivity = {total: total, items: []};

        deltaTime = 24 * 3600 * 1000; // daily

        timeBegin = (params.timestamp_start).getTime();
        timeEnd =(params.timestamp_end).getTime();
        daysSelected =  Math.round((timeEnd - timeBegin) / 3600/24/1000);

        if (daysSelected <= 1 ) {
          maxIndex = 24 ; // one day , resolution is hourly data
          deltaTime = 3600 * 1000; // hourly
          dayInmilliseconds = (d.getTime() - (24 * 3600 * 1000));
        }
        else if (daysSelected <=  7)  {
          maxIndex = 7; // 7 days , resolution is daily data
          dayInmilliseconds = (d.getTime() - (7* 24 * 3600 * 1000));
        }
        else if (daysSelected <= 30) {
          maxIndex = 30; // 30 days , resolution is daily data
          dayInmilliseconds = (d.getTime() - (30* 24 * 3600 * 1000));
        }
        else { // custom range
          maxIndex = daysSelected; // x days , resolution is daily data
          dayInmilliseconds = (d.getTime() - (daysSelected * 24 * 3600 * 1000));
        }

        for (var index = 0; index < maxIndex; index++) {
          d.setTime(dayInmilliseconds + (index * deltaTime));
          total = Math.floor((Math.random() * 100));
          tempValue = Math.floor((Math.random() * 50));
          someUsage = (tempValue > total) ? total : (total - tempValue);

          var item = {
            'total': total,
            'some_usage': someUsage,
            'date': d.toISOString().slice(0, 19) + 'Z'
          };
          appActivity.items.push(item);
        }
      }

      return {
        loadappActivity: loadappActivity
      };
    }
  ]);
非常感谢您的帮助

看。。。对于Angular 5中的promise和$q,但未找到有用的详细信息

在Angular中,假设您不使用polyfills.ts,您应该能够像下面的示例中那样使用Promise

想。。。使用Angular 5和Typescript将此代码传输到

这是让你开始的基本设置,我不打算复制所有代码,因为我看到其中有一些遗漏/奇怪的地方,可能对修复有更大的影响,比如你有一个从未使用过的params arg,还有一个从未定义过的函数injectappActivity

考虑使用angular cli生成服务

ng generate service app-active-mock
然后像这样更新它

app-active-mock.service.ts @注射的 导出类AppActiveMockService{ 公共活动:承诺{ 回报承诺。决心。。。 } }
也有点不相关,但您可能不会找到任何有用的搜索与Angular中的承诺相关的内容,因为在大多数情况下,社区都接受了Observable

谢谢您对我问题的回答。实际上,这是模拟数据的服务。用丢失的代码更新了代码function@Kim2018我认为这很好地回答了你的问题。您还需要什么其他信息?该问题在当前状态下无法获得高质量的答案。目前还不清楚这项服务应该如何使用,您对答案的期望以及您对Angular的专业水平。根据经验,可观测值应该用于角度测量。它们比承诺更具普遍性,而且它们是可以取消的——而承诺不是。因此,服务应该被重写为可观察的对象——其他使用它的单位也应该如此。