javascript - 在链式 Promise 中,为什么第二个 Promise 在第一个 Promise 之前执行?

标签 javascript node.js promise

我正在使用此授权流程来获取 Spotify API 的访问 token 。这组链式 Promise 中的第一个 Promise 设置 access_token,除非出现错误,否则会将错误记录到控制台。第二个 promise 只是打印出最近设置的访问 token 。我认为这段代码会阻止第二个 .then() 内的代码执行,直到第一个 promise 得到解决。

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() 内的第二个 Promise 在第一个 Promise 之前执行。为什么会发生这种情况?我想我可能对 Javascript 中的 Promise 如何工作有一个根本性的误解,但我不确定我到底不明白什么。

最佳答案

这行代码没有链接 promise

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

您将函数传递给 Promise,以便 Promise 可以在完成时调用该函数。

传递一个函数,它应该开始工作

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

关于javascript - 在链式 Promise 中,为什么第二个 Promise 在第一个 Promise 之前执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54820048/

相关文章:

javascript - 跨页面传递 json 值

node.js - 在node.js amdefine中使用RequireJS插件

node.js - Bluebird 在源代码中抛出异常

javascript - 检查哪个元素被点击

javascript - 有一个 DIV 'stick' 用于 x 数量的卷轴

android - 从 Android 应用程序进行身份验证时,Passport JS req.user 未定义

node.js - 为什么在 Node.js 中的子进程上使用 Promise 或 async/await?

javascript - 那么如何进行异步呢?

javascript - 在 Internet Explorer 中触发刷新事件

javascript - 如何在浏览器中使用 CloudFront 签名的 cookie?