2017-12-04 17 views
2

Spotifyは、ブラウザ、Web Playback SDKでの完全な曲の再生をサポートするベータ版の新機能を備えています。ドキュメントでは、メインHTMLファイルのスクリプトタグを使用してプレーヤーを即座に初期化する例を示しています。これには、スクリプト内ですぐにアクセストークンを設定する必要があります。私の問題は、Reactアプリケーションを作成していることです。ユーザーがSpotifyアカウントにログインするためにボタンをクリックした場合にのみ、プレイヤーを初期化したいと考えています。このイベントが発生したときにのみスクリプトをロードするために、私はreact-load-scriptを使用しています。私が欲しいのは、ユーザーがボタンをクリックしてSpotifyアカウントにログインし、ログインがSpotifyによって認証されると、私のアプリケーションがアクセストークンを受け取り、Web再生スクリプトがロードされ、スクリプトがロードされるとコールバック関数が呼び出されるプレイヤーはアクセストークンを使用して初期化されます。ReactでSpotify Web Playback SDKを使用する

spotify-playerスクリプトがロードされるまで、Spotifyオブジェクトが存在しないという問題があります。handleScriptLoadコールバックが実際に呼び出されると、Spotifyオブジェクトが定義されますが、コードがコンパイルされるときには、 。誰にもこの問題を回避する方法はありますか?私のリアクトコンポーネントのrenderメソッドで

import Script from 'react-load-script' 

... 

handleScriptLoad =() => { 
const token = this.props.tokens.access 
const player = new Spotify.Player({  // Spotify is not defined until 
    name: 'Spotify Web Player',   // the script is loaded in 
    getOAuthToken: cb => { cb(token) } 
}) 

player.connect() 
} 

... 

:関連から

コードサンプルは、コンポーネントに反応

<Script 
    url="https://sdk.scdn.co/spotify-player.js" 
    onError={this.handleScriptError} 
    onLoad={this.handleScriptLoad} 
/> 
+0

[非同期呼び出しから応答を返すにはどうすればよいですか?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-コール) – Liam

答えて

1

理論的には、それが可能です。

Web Playback SDKは、外部スクリプトを使用してwindow.SpotifyオブジェクトをSDKに非同期にロードします。

handleScriptLoad =() => { 
    return new Promise(resolve => { 
    if (window.Spotify) { 
     resolve(); 
    } else { 
     window.onSpotifyWebPlaybackSDKReady = resolve; 
    } 
    }); 
} 

あなたの問題を解決する必要がありますので、定義するオブジェクトを待っていると、問題を解決する必要があります。

+0

ありがとうBilawal Hameed!私は実際にプレイヤーをSpotify.Playerではなくwindow.Spotify.Playerとして定義するだけで問題を解決しました。これは実質的にそのwindow.Spotifyを無視し、スクリプトがロードされるまでhandleScriptLoad関数が実行されます。 – xxDOOMbox

+0

興味深い。 'window.Spotify'は' undefined'となり、あなたはそのメソッドを呼び出そうとしているので、それはエラーを投げるでしょうか? –

+0

エラーは発生しません。どうやら、 'Player'メソッドはコンパイル時にチェックされていないので、' Spotify'は最初は 'undefined'であるということは関係ありません。 – xxDOOMbox

関連する問題