2017-11-29 11 views
3

私はSpotifyアプリを開発中です。私はログインして自分のトークンを得ることができます。私の問題は、メソッド外の変数にアクセスできないことです。この場合、"getCurrentUser"約束 `.then`メソッドの外で変数にアクセスするにはどうすればいいですか?

は、これが私の方法である:

function getUser() { 
    if ($localStorage.token == undefined) { 
    throw alert("Not logged in"); 
    } else { 
    Spotify.getCurrentUser().then(function(data) { 
     var names = JSON.stringify(data.data.display_name); 
     console.log(names) 
    }) 
    } 
}; 

あなたは私が名前をconsole.loggedと私はコンソールで正しい値を得るか見ることができるように。しかし、私は関数を呼び出す場合にのみ動作しますgetUser()私はundefinedでも変数の名前を返します。

私はその変数に$scopeが必要です。

+0

私はあなたが 'names'を返してきた推測しているが、あなたはまた、'リターンを必要としますSpotify.getCurrentUser()... 'それで約束を返すようにします(そして、当時からの戻り値) – Danny

答えて

5

getUser()は何も返しません。 Spotify.getCurrentUser()から約束を返す必要があります。namesに返すと、それは外部関数によって返されます。

function getUser() { 

    if ($localStorage.token == undefined) { 
     throw alert("Not logged in"); 
    } 
    else { 
     return Spotify.getCurrentUser().then(function(data) { 
      var names = JSON.stringify(data.data.display_name); 
      console.log(names) 
      return names; 
     }) 
    } 
} 

は上記getUser()を呼び出すときにundefinedを取得した理由答えていますが、最後で作業したい場合にも、あなたはgetUserメソッドから取得した値を使用している方法を変更したいつながる - それは約束を返します。あなたのコードは、約束が解決さ時に約束のthenメソッドを呼び出すために望んでいるので、オブジェクト、最後には、あなたが後にしている結果ではない:

getUser()      // this returns a promise... 
    .then(function(names) {  // `names` is the value resolved by the promise... 
     $scope.names = names;  // and you can now add it to your $scope 
    }); 
+0

私はこれで新しいです、申し訳ありません、それは働いていましたが、$$州で始まるオブジェクトを取得します。 –

+0

それを手伝ってもらえますか? –

+0

'getUsers()'から得られる約束を処理するためのコードをいくつか追加しました。以前のコメントでリンクした他の答えよりもはるかにクリーンです。 – Danny

関連する問題