Jer*_*eld 0 javascript node.js promise
我正在使用此授权流程来获取Spotify API的访问令牌.这组链式承诺中的第一个承诺设置access_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())
);
Run Code Online (Sandbox Code Playgroud)
但我得到这个输出:
PRE ACCESS TOKEN: undefined
POST ACCESS TOKEN: undefined
Run Code Online (Sandbox Code Playgroud)
这意味着第二个承诺在第二个承诺.then()之前执行.为什么会这样?我想我可能对Javascript中的承诺如何工作有一个基本的误解,但我不确定我究竟是什么,我不明白.
这条线不是一个承诺
.then(
console.log("POST ACCESS TOKEN: " + spotifyApi.getAccessToken())
);
Run Code Online (Sandbox Code Playgroud)
您将函数传递给promise,因此promise可以在函数完成时调用该函数.
传递一个函数,它应该开始工作
.then(function() {
console.log("POST ACCESS TOKEN: " + spotifyApi.getAccessToken())
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34 次 |
| 最近记录: |