2016-05-09 3 views
3

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メソッドです。これは完全にlocalhostで動作します。 topLevelClosed varは 'false'で、これはREST呼び出しから返された値と同じです。 しかし、(Google App Engineに)デプロイすると、下の画像に示すように、「約束事に包まれました」という結果が得られます。しかし、ブラウザウィンドウからRESTサービスを呼び出すと、必要なときにfalseが返されます。

promise result when deployed

promise result on localhost

この作品は展開されていないだろうのに、なぜ?

答えて

2

あなたが記述した動作は、私がこのコードで期待しているものです。あなたの関数が約束を返すと、あなたの呼び出しではなくtopLevelClosedはブール値を返す場合、あなたはthen(...)せずに値を直接アクセスすることができ、この

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

ようになります。

私はいつもこのように、約束を返します一貫性のある動作を取得するには:

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

私はそれがあることを望んだが、あなたはそれを改善することができますだけでなく、これはとしてはかなりではありません。ただし、常に一貫したリターンタイプを使用することをお勧めします。ブール値と約束を組み合わせるときは、戻り値の型を分析してから続行する必要があります。

+0

彼は '$ stateParams'を注入しているので、これはおそらく解決方法です。解決方法では、もしあなたが約束を返すかどうかは関係ありません。ルータがそれを解決するという約束であれば、解決された約束かこの場合原始的な 'false ' –

+0

@NexusDuck $リソースメソッドの結果が自動的に解決されるようにui-routerでどのように終わるかについて詳しく説明することができます。私はここに注射は見ません。私が見る唯一のことは、パラメータを持つ関数であり、その関数がどのように呼び出されているのかわかりません。 – konqi

+0

[$ stateParams](https://github.com/angular-ui/ui-router/wiki/URL-Routing#user-content-stateparams-service)は、通常は解決機能で使用されるui-routerサービスです –

関連する問題