Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 本地主机与已部署主机的角度差异_Javascript_Angularjs_Google App Engine_Promise - Fatal编程技术网

Javascript 本地主机与已部署主机的角度差异

Javascript 本地主机与已部署主机的角度差异,javascript,angularjs,google-app-engine,promise,Javascript,Angularjs,Google App Engine,Promise,我正在调用一个REST服务,它返回true或false function topLevelClosed($stateParams) { var id = $stateParams.id; return id ? Traject.topLevelClosed({id: id}).$promise : false; } var topLevelClosed = { method: 'GET', url: trajectURL + ':id/topLevelClosed' }; t

我正在调用一个REST服务,它返回true或false

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变量为“false”,它等于REST调用返回的值。 然而,当部署(到谷歌应用程序引擎)时,我得到的结果是“包装在承诺中”,如下图所示。但是,当我通过browserwindow调用REST服务时,它会返回false


为什么在部署时这不起作用?

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

topLevelClosed($stateParams).then(function(value){
  /* do something with value */
});
如果topLevelClosed返回布尔值,则可以直接访问该值,而无需使用
然后(…)

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

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;
}

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

他正在注入
$stateParams
,因此这很可能是一种解决方法。在解决方法中,无论你是否回报承诺,如果这是一个承诺,路由器将为您解决它,因此您将始终得到已解决的承诺,或者在本例中是原语
false
@NexusDuck。您可能需要详细说明$resource方法的结果如何在ui路由器中自动解决。我看这里没有注射。我唯一看到的是一个带参数的函数,我不知道该函数是如何调用的。是一个ui路由器服务,通常用于解析函数。从问题中的代码中,我猜该函数被调用,$stateParams作为参数转发,因为我们在命名变量时都很懒惰,所以参数变量在函数中有相同的名称。我不想仓促下结论。我们可能需要从op中获得更多信息。我倾向于删除与问题不匹配的答案,因此不会造成任何伤害。