2016-06-29 13 views
0

M.E.A.Nスタックでアプリを開発しています。私は角度コントローラー(指令から)とサービスを使用しています。コントローラがサービスを呼び出すと、サービスはNodeJSにGET要求を送信し、結果を取得します。次に、結果をサービスに記録し、データを取得します。AngularJSコントローラはサービスの前にconsole.log()を実行します

問題は、コントローラが結果を取得する前にサービスがログに記録されることです。 services.jsで

this.contacts = contactsSrv.show(); 
console.log(this.contacts); 

そして、それは私がコンソールに見るものだ:directives.jsで

var self = this; 
self.show = function() { 
    $http.get('/contactlist').success(function(response) { 
     console.log(response); 
     return response; 
    }); 

Image

(ディレクティブログそれを取得する前にcontactsSrv.show()の結果)

contactsSrv.show()を非同期にするにはどうすればよいですか?

ありがとうございます!私はouside stackoverflowのからいくつかのデータをretriveする必要があるとして、

+0

[AngularJS - 成功のリターン$ http.post]の可能な重複(http://stackoverflow.com/questions/28476111/angularjs-return-in-success-http-post ) –

答えて

2

約束のリターンとして$http.jsonpに置き換え

service.js

var self = this; 
self.show = function() { 
    return $http.get('/contactlist'); 
}; 

directive.js

contactsSrv.show() 
    .then(function (response) { 
     console.log(response); 
     this.contacts = response; 
    }); 
+0

'TypeError:プロパティを読み取ることができません '、次に'未定義です ' – shabenda

+0

@ K.Burrell - 回答の感覚を編集します。/ –

+0

@KrzysztofSafjanowski答えの感覚?私はそれが一番上の投票された答えだったので、これを変更していました。 –

1

$http.getを.then使用。

successthenメソッドに置き換えます。コントローラ/実行セクションに結果をチェーンすることができます。

angular.module('app', []) 
 
    .service('contactsSrv', function($http) { 
 
    this.show = function() { 
 
     return $http.jsonp('//public-api.wordpress.com/rest/v1/sites/wtmpeachtest.wordpress.com/posts?callback=JSON_CALLBACK').then(function(response) { 
 
     return response.data; 
 
     }); 
 
    } 
 
    }).run(function(contactsSrv) { 
 
    contactsSrv.show().then(function(r) { 
 
     console.log('found posts', r.found) 
 
    }) 
 
    })
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app='app'> 
 
</div>

関連する問題