2016-09-02 3 views
0

これは状況です:

$scope.signupNow = function() { 
    retrieveData(); 
    console.log($scope.userid); 
} 

function retrieveData(){ 
    // ** some http request ** 
    $scope.userid = id; 
} 

は今、HTTP要求が実行に時間がかかるし、それだけで関数を呼び出した後、印刷しているため、「$のscope.userid」の値はありません。

応答が来るまで待つ方法をお勧めしますか?

+0

をコールバック関数でコードを書き留めます。それはAJAXの 'async'の振る舞いのために起こっています。 '.then(function(){' - code - '})'にコードを入れよう – Vineet

+0

Angularのウェブサイトで$ httpのドキュメントを読んだことがありますか?それは約束の使用をかなり明確に記述しています(あなたはその話題についていくつか読んでみたいかもしれません)。 – Raxr

答えて

0

OK uは、HTTP応答するまで待機するならば、uはコールバック関数を使用することができます

$scope.signupNow = function() { 

    retrieveData(function(){ 

     console.log($scope.userid); 
    }); 
} 

function retrieveData(callback){ 
    // ** some http request ** 
    $scope.userid = id; 
    callback(); 
} 
+0

それは仕事です:)ありがとう... ... –

3
$scope.signupNow = function() { 

    retrieveData().then(funtion(response) { 
    console.log(response.data); 
    // do here what you need 
    }); 
} 

function retrieveData(){ 
    return $http.get('url'); 
} 
+0

上記の「retrieveData()is undefined」のエラーを取得して申し訳ありません。 –

+0

名前付き関数は、実行時にJavaScriptの実行時にファイルの先頭に格納されるため、定義する必要があります。 – Amygdaloideum

0

使用angularJsは約束 -

$scope.signupNow = function() { 
    var promise = retrieveData(); 
    promise.then(function(success) { 
    console.log($scope.userid); 
    }, function(reason) { 
    alert('Failed: ' + reason); 
    }); 

} 


function retrieveData(){ 
var deferred = $q.defer(); 
(your http request).then(){ 
    $scope.userid = id; 
    deferred.resolve('success'); 
    } 
    return deferred .promise; 
} 
関連する問題