我正在调用返回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。
部署后为什么不能胜任这项工作?
答案 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;
}
嗯,这并不像我希望的那样漂亮,但你可以改进它。但我建议您始终使用一致的返回类型。当您混合布尔值和承诺时,您必须在继续之前分析返回值的类型。