我正在尝试将Promise的实际响应存储到变量
exp()
运行此命令时,token将返回Promise对象而不是实际响应。如何将实际响应或响应中的值存储为父函数中的变量?
答案 0 :(得分:0)
我首先创建一个名为get token的方法。
根据4castle的建议更新/简化
getToken() {
return fetch(tokenUrl, options)
.then(res => res.json())
.then(data => data.access_token)
}
然后在方法中你想使用令牌
someMethod() {
getToken().then(token => {
// Use it.
})
}
答案 1 :(得分:0)
因为函数then
返回一个承诺。
另一种方法是使用async
函数。
function getToken() {
let tokenPromise = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('myNewToken');
}, 100);
});
return tokenPromise;
}
async function main() {
let token = await getToken();
console.log(token);
}
main();

答案 2 :(得分:0)
为什么围绕Promise
创建新的fetch
?
function status(res) {
if (res.ok) {
return Promise.resolve(res)
} else {
return Promise.reject(new Error(res.statusText))
}
}
function json(res) {
return res.json()
}
function getToken() {
return fetch(tokenUrl, options) // Fetch URL
.then(status) // Is everything nice?
.then(json) // Response to json
.then(jsonData => jsonData.access_token) // return access_token
.catch(function(error) { // Some S*ht Happens :(
console.log('Request failed', error);
/* ErrorHandling Stuff */
});
}
答案 3 :(得分:0)
您可以使用ES7 async / await
let token;
let tokenPromise = async () => {
try {
const res = await fetch(tokenUrl, options);
const data = await res.json();
return data.access_token
} catch (error) {
console.error('Error fetching token', error);
return 'Not clean';
}
}
token = tokenPromise().then(res => res);
return token;