В цепном обещании, почему второе обещание выполняется перед первым обещанием? - PullRequest
0 голосов
/ 22 февраля 2019

Я использую этот поток авторизации для получения токена доступа для Spotify API.Первое обещание в этом наборе связанного обещания устанавливает access_token, если нет ошибки, где оно регистрирует ошибку на консоли.Второе обещание просто распечатывает недавно установленный токен доступа.Я думал, что этот код будет препятствовать выполнению кода во втором .then() до тех пор, пока не будет решено первое обещание.

console.log("PRE ACCESS TOKEN: " + spotifyApi.getAccessToken())

spotifyApi.clientCredentialsGrant().then(
  function(data) {
    console.log("The access token expires in " + data.body["expires_in"]);
    console.log("The access token is " + data.body["access_token"]);

    // Save the access token so that it's used in future calls
    spotifyApi.setAccessToken(data.body["access_token"]);
  },

  function(err) {
    console.log(
      "Something went wrong when retrieving an access token",
      err.message
    );
  }
).then( 
    console.log("POST ACCESS TOKEN: " + spotifyApi.getAccessToken())
); 

Но я получаю следующий вывод:

PRE ACCESS TOKEN: undefined
POST ACCESS TOKEN: undefined  

Это означает, что второе обещание, в течение второго .then(), выполняется перед первым обещанием.Почему это происходит?Я думаю, что у меня, вероятно, есть фундаментальное недопонимание того, как работают обещания в Javascript, но я не уверен точно, что я не понимаю.

1 Ответ

0 голосов
/ 22 февраля 2019

Эта строка не объединяет обещание

.then( 
    console.log("POST ACCESS TOKEN: " + spotifyApi.getAccessToken())
); 

Вы передаете функцию обещанию, чтобы обещание могло вызвать функцию после ее завершения.

Пропустить функцию, и она должна начатьсярабочая

.then(function() { 
    console.log("POST ACCESS TOKEN: " + spotifyApi.getAccessToken())
}); 

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...