角度承诺差异localhost与部署

时间:2016-05-09 07:31:11

标签: javascript angularjs google-app-engine promise

我正在调用返回true或false的REST服务。

function topLevelClosed($stateParams) {
  var id = $stateParams.id;
  return id ? Traject.topLevelClosed({id: id}).$promise : false;
}

var topLevelClosed = {
  method: 'GET',
  url: trajectURL + ':id/topLevelClosed'
};

topLevelClosed是$ resource方法。这完全适用于本地主机。 topLevelClosed var为' false',它等于REST调用返回的值。 但是,当部署(到谷歌应用引擎)时,我得到的结果"包含在一个承诺"如下图所示。但是,当我通过浏览器窗口调用REST服务时,它会返回false。

promise result when deployed

promise result on localhost

部署后为什么不能胜任这项工作?

1 个答案:

答案 0 :(得分:2)

您描述的行为是我对此代码的期望。当您的函数返回一个承诺时,您的调用将如下所示

topLevelClosed($stateParams).then(function(value){
  /* do something with value */
});

如果相反topLevelClosed返回一个布尔值,那么你可以在没有then(...)的情况下直接访问该值。

为了获得一致的行为,我总是会返回一个承诺,如下:

function topLevelClosed($stateParams) {
  var deferred = $q.defer();
  if(id){
    Traject.topLevelClosed({id: id}).$promise.then(function(value){
      deferred.resolve(value);
    });
  } else {
    deferred.resolve(false);
  }
  return $q.promise;
}

嗯,这并不像我希望的那样漂亮,但你可以改进它。但我建议您始终使用一致的返回类型。当您混合布尔值和承诺时,您必须在继续之前分析返回值的类型。