javascript - 如何检查 angularjs 服务中的返回值是否是 promise ?

标签 javascript angularjs jasmine karma-runner

我很难猜测如何实际检查函数的返回值是否是一个 promise 。我将 Jasmine 与 Karma 和 angularjs 一起使用。我做了一项服务:

var app = angular.module('myService', []);

function simpleResource ($q) {

   this.cget = function () {
     var deferred = $q.defer();

     return deferred.promise;
   };

   this.get = function () {
     // body...
   };

   this.save = function () {
     // body...
   };

   this.delete = function () {
     // body...
   };
}

app
  .service('nsResource', simpleResource);

正如您所看到的,cget 方法应该返回一个 Promise,我如何测试返回的值是否实际上是一个 Promise?

最佳答案

(function(angular) {
  'use strict';
  angular.module('includeExample', ['ngAnimate'])
    .controller('ExampleController', ['$scope', '$q',
      function($scope, $q) {


        $scope.a = "";
       
        $scope.asyncGreet = function(name) {
          var deferred = $q.defer();

            deferred.notify('About to greet ' + name + '.');
            if (true) {
              deferred.resolve('Hello, ' + name + '!');
            } else {
              deferred.reject('Greeting ' + name + ' is not allowed.');
            }

          return deferred.promise;
        };
        $scope.promise = $scope.asyncGreet('Robin Hood');
        $scope.a = $scope.promise.constructor.name;

       

      }
    ]);
})(window.angular);
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-beta.1/angular.min.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-beta.1/angular-animate.js"></script>

<body ng-app="includeExample">
  <div ng-controller="ExampleController">

    <div class="slide-animate-container">
      <span ng-bind="a"><span>
      
    </div>
  </div>
</body>

您可以使用构造函数:

deferred.promise.constructor == Promise

关于javascript - 如何检查 angularjs 服务中的返回值是否是 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32926262/

相关文章:

javascript - 使用 window.location 设置样式

javascript - 如何刷新 promise 链中的数据?

javascript - AngularJS/ng-grid - 使用拼接更新数组不会更新 UI

javascript - Uncaught ReferenceError : define is not defined

javascript - 如何在 Jasmine Node.js 中测试事件?

javascript - Jasmine 模拟 ajax 调用在 IE 中不起作用

javascript - 在不使用任何标准 JavaScript 方法的情况下检查字符串是否包含子字符串?

javascript - 如何将 onclick 事件处理程序作为类方法

javascript - 在 JavaScript 和 SendGrid 中设置电子邮件格式

javascript - 涉及 'ui.state' 的 Angular Controller 抛出错误 : Argument 'Controller' is not a function, 获取字符串