我在这里有点困惑,某些异步代码的这一部分无法正常工作。问题出在这里:
export async function active() {
return new Promise(function(resolve,reject){
fetch("https://api.spotify.com/v1/me", { //omitted headers to keep it clean
}).then(response => console.log(response)) <-- This code runs, and will log a response
.then(data => function(){ <-- but this won't
console.log("This won't run either")
if (data.status == 200) {
console.log(true)
resolve(data)
} else {
console.log(false)
reject(data)
}
})
})
}
为什么第二部分没有运行?抱歉,我对异步/等待有点陌生
答案 0 :(得分:5)
那里有一些问题
.then(data => function(){
传递一个函数,该函数将一个函数返回到.then
中。您需要 箭头功能或 function
关键字,但不要同时使用两者。由于您要做的只是返回一个函数(什么都没有调用),因此您看不到该函数的内容运行。摆脱其中的function()
部分。
在该代码中没有理由new Promise
(也没有理由将功能设为async
),只需使用fetch
中的promise链即可。 (更多here。)
您的第一个then
处理程序返回undefined
,因为您要返回console.log
的结果。
您的代码使用名称data
,在那里您仍在处理尚未读取其正文的Response对象。您可能想通过.text()
,.json()
或其他类似的正文读取方法来读取正文。
相反:
export function active() {
return fetch("https://api.spotify.com/v1/me", { //omitted headers to keep it clean
})
.then(response => {
if (!repsonse.ok) {
throw new Error("HTTP status " + response.status);
}
return response.text(); // or `.json()` or several others, see #4 above
});
}
请注意,我在那里略微更改了对成功的检查。