[解決済み】$httpレスポンスのサービス内処理
2022-04-05 22:43:53
質問
最近、私が直面している問題の詳細な説明を投稿しました。
こちら
にて。を送ることができなかったので、実際の
$http
のリクエストで、タイムアウトを使用して非同期動作をシミュレートしています。モデルからビューへのデータバインディングは、@Gloopyの助けを借りて、正しく動作しています。
では
$http
の代わりに
$timeout
(ローカルでテスト)したところ、非同期リクエストが成功し
data
は私のサービスでjsonレスポンスで満たされています。しかし、私のビューは更新されません。
Plunkrを更新 こちら
解決方法は?
以下は、あなたが望むことを実現するPlunkです。 http://plnkr.co/edit/TTlbSv?p=preview
このアイデアは、プロミスとその "then" 関数を直接操作して、非同期に返されたレスポンスにアクセスすることです。
app.factory('myService', function($http) {
var myService = {
async: function() {
// $http returns a promise, which has a then function, which also returns a promise
var promise = $http.get('test.json').then(function (response) {
// The then function here is an opportunity to modify the response
console.log(response);
// The return value gets picked up by the then in the controller.
return response.data;
});
// Return the promise to the controller
return promise;
}
};
return myService;
});
app.controller('MainCtrl', function( myService,$scope) {
// Call the async method and then do stuff with what is returned inside our own then function
myService.async().then(function(d) {
$scope.data = d;
});
});
以下は少し複雑なバージョンで、リクエストをキャッシュして初回のみ実行するようにします ( http://plnkr.co/edit/2yH1F4IMZlMS8QsV9rHv?p=preview ):
app.factory('myService', function($http) {
var promise;
var myService = {
async: function() {
if ( !promise ) {
// $http returns a promise, which has a then function, which also returns a promise
promise = $http.get('test.json').then(function (response) {
// The then function here is an opportunity to modify the response
console.log(response);
// The return value gets picked up by the then in the controller.
return response.data;
});
}
// Return the promise to the controller
return promise;
}
};
return myService;
});
app.controller('MainCtrl', function( myService,$scope) {
$scope.clearData = function() {
$scope.data = {};
};
$scope.getData = function() {
// Call the async method and then do stuff with what is returned inside our own then function
myService.async().then(function(d) {
$scope.data = d;
});
};
});
関連
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Vueが定義されていない
-
[解決済み] AngularJs ReferenceError: $http is not defined
-
[解決済み] JavaScriptでHTTP GETリクエスト?
-
[解決済み] ServiceとFactoryで迷う
-
[解決済み] AngularJS 。非同期データでサービスを初期化する
-
[解決済み]AngularJSでHTTP 'Get'サービスの応答をキャッシュする?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Heroku:ノードアプリで「このアプリにはデフォルトの言語が検出されませんでした」エラーがスローされる
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み] 明示的なプロミス構築のアンチパターンとそれを回避する方法とは?