[英]Get asynchronous response of http post request into variable with Node.js
[英]Access the response of Node.JS Post Request
我正在嘗試圍繞 Spotify API 的客戶端憑證流程,在他們的文檔中,他們有這種方式來獲取訪問令牌:
var client_id = 'CLIENT_ID';
var client_secret = 'CLIENT_SECRET';
const authOptions = {
url: "https://accounts.spotify.com/api/token",
headers: {
"Authorization":
"Basic " +
new Buffer.from(clientID + ":" + clientSecret).toString("base64"),
"Content-Type": "application/x-www-form-urlencoded",
},
form: {
grant_type: "client_credentials",
},
json: true,
};
request.post(authOptions, function(error, response, body) {
if (!error && response.statusCode === 200) {
var token = body.access_token;
}
});
現在我正在嘗試獲取該token
並在 API 調用中導出或使用它,但無論我做什么,我都無法訪問該語句。
將 POST 放入變量或 function 並調用它會導致undefined
。
這就是我想要實現的目標:
import authOptions from "./credentials.js";
import pkg from "request";
const { post } = pkg;
const Spotify = {
getAccessToken() {
post(authOptions, function (error, response, body) {
if (!error && response.statusCode === 200) {
const token = body.access_token;
return token;
}
});
},
async search(input) {
const accessToken = Spotify.getAccessToken();
const response = await fetch(
`https://api.spotify.com/v1/search?q=${input}&type=artist`,
{
headers: {
"Authorization": `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
}
);
const data = await response.json();
console.log(data);
},
};
export default Spotify;
當然,該發布請求沒有返回訪問令牌。
有什么辦法可以將那段代碼轉換為Async/Await
?
您可以創建一個新的 promise:
async function getAccessToken(){
return new Promise((resolve, reject) => {
post(authOptions, function (error, response, body) {
if(error){
reject(error);
} else if (response.statusCode === 200) {
const token = body.access_token;
resolve(token);
}
});
});
};
解析/拒絕允許您在調用回調時返回該值,並將錯誤傳遞給調用者進行處理。 您可以使用這種格式來承諾任何基於回調的 function,方法是在 promise 內部調用它並使用解析/拒絕返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.