[解決済み] angularjsのプロミスを返す前に解決することはできますか?
2022-08-01 20:28:35
質問
プロミスを返す関数を書こうとしています。しかし、要求された情報がすぐに利用できる場合があります。消費者が決定を下す必要がないように、それをプロミスでラップしたいのです。
function getSomething(id) {
if (Cache[id]) {
var deferred = $q.defer();
deferred.resolve(Cache[id]); // <-- Can I do this?
return deferred.promise;
} else {
return $http.get('/someUrl', {id:id});
}
}
そして、このように使う。
somethingService.getSomething(5).then(function(thing) {
alert(thing);
});
問題は、解決済みのプロミスに対してコールバックが実行されないことです。これは正当なことなのでしょうか?この状況を処理する良い方法はありますか?
どのように解決するのですか?
簡単な答えです。はい、できます。 AngularJSのプロミスを返す前に解決することができ、それはあなたが期待するように動作します。
から JB NizetのPlunkr からですが、元々尋ねられたこと(つまりサービスへの関数呼び出し)のコンテキスト内で、実際に現場で動作するようにリファクタリングされています。
サービスの内部では...
function getSomething(id) {
// There will always be a promise so always declare it.
var deferred = $q.defer();
if (Cache[id]) {
// Resolve the deferred $q object before returning the promise
deferred.resolve(Cache[id]);
return deferred.promise;
}
// else- not in cache
$http.get('/someUrl', {id:id}).success(function(data){
// Store your data or what ever....
// Then resolve
deferred.resolve(data);
}).error(function(data, status, headers, config) {
deferred.reject("Error: request returned status " + status);
});
return deferred.promise;
}
コントローラの内部は...。
somethingService.getSomething(5).then(
function(thing) { // On success
alert(thing);
},
function(message) { // On failure
alert(message);
}
);
誰かのお役に立てれば幸いです。他の回答があまり明確でなかったので。
関連
-
[解決済み】Angular ui-routerで$stateメソッドを$stateChangeStart toStateとfromStateで使用する。
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] ng-repeat内で$indexを使用して、クラスを有効にしてDIVを表示するにはどうすればよいですか?
-
[解決済み] AngularJS の ng-disabled ディレクティブに式を指定しても動作しない
-
[解決済み] AngularJSのリソースプロミス
-
処理されない例外が発生しました。Angular 実行中のプロジェクトで NGCC に失敗しました。
-
AngularJSのベストプラクティス。ng-repeatの$indexに注意する。
-
[解決済み] Angular.js: $evalの仕組みとバニラevalとの違いは何ですか?
-
[解決済み] あるAngularJSのコントローラが別のコントローラを呼び出すことはできますか?
-
[解決済み] JavascriptのPromiseを関数スコープ外で解決する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】typeerrorは、未定義のプロパティ'data'を読み取ることができません。
-
[解決済み】Angularjsのng-viewが動作しない。
-
[解決済み】angularのonLoadとng-initの違いについて
-
[解決済み] オブジェクトと選択機能を備えたAngularJS BootstrapUI Typeahead
-
[解決済み] X-Frame-Options'を'SAMEORIGIN'に設定しているため、フレーム内での表示を拒否された。
-
[解決済み] シンプルなangularjsの日付入力
-
[解決済み] ng-pattern` - 数字だけをチェックする方法は?
-
angularでのng-repeatとtrack by
-
[解決済み] Angularjsを使用してローカルストレージにデータを保存するにはどうすればよいですか?
-
[解決済み] Jasmineの "callThrough "と "callFake() "の実用的な例が欲しい