我需要一个令牌传递给 JS 中的不同函数,但它始终未定义。试过回调但不确定如何实现
I need a token to be passed to different functions in JS but it is always undefined. tried Callback but not sure how to implement
这里是 getToken 函数,许多函数都会调用它来执行:
export function getToken() {
axios.post(tokenUrl, requestData, requestConfig)
.then((response) => {
console.log(" TOKEN: "+ response.statusText, response.data)
token = response.data.token
return token
})
.catch((error) => {
console.log("TOKEN ERROR: ", error);
})
}
并且令牌被其他函数(和其他类似函数)使用:
export async function useToken() {
const token = await getToken()
console.log(`${token}`);
let requestConfig = {
headers: {
'Authorization': `Bearer ${token}`
}
};
axios.post(totpUrl, requestData, requestConfig)
.then((response) => {
console.log("RESPONSE RECEIVED: ", response)
})
.catch((error) => {
console.log("ERROR: ", error);
})
}
如果我没看错的话,您是在尝试从异步函数中调用同步函数,这并不像人们期望的那么简单。
尝试在同步函数中使用promise。类似这样的东西(未经测试)应该可以让您在尝试时使用“await”:
function getToken() {
return new Promise((resolve, reject) => {
axios.post(tokenUrl, requestData, requestConfig)
.then((response) => {
console.log(" TOKEN: "+ response.statusText, response.data)
token = response.data.token
resolve(token)
})
.catch((error) => reject(error) )
});
}
您的函数 getToken 没有 return 令牌。它 return 未定义。只需在 axios 前添加 'return'。
这里是 getToken 函数,许多函数都会调用它来执行:
export function getToken() {
axios.post(tokenUrl, requestData, requestConfig)
.then((response) => {
console.log(" TOKEN: "+ response.statusText, response.data)
token = response.data.token
return token
})
.catch((error) => {
console.log("TOKEN ERROR: ", error);
})
}
并且令牌被其他函数(和其他类似函数)使用:
export async function useToken() {
const token = await getToken()
console.log(`${token}`);
let requestConfig = {
headers: {
'Authorization': `Bearer ${token}`
}
};
axios.post(totpUrl, requestData, requestConfig)
.then((response) => {
console.log("RESPONSE RECEIVED: ", response)
})
.catch((error) => {
console.log("ERROR: ", error);
})
}
如果我没看错的话,您是在尝试从异步函数中调用同步函数,这并不像人们期望的那么简单。
尝试在同步函数中使用promise。类似这样的东西(未经测试)应该可以让您在尝试时使用“await”:
function getToken() {
return new Promise((resolve, reject) => {
axios.post(tokenUrl, requestData, requestConfig)
.then((response) => {
console.log(" TOKEN: "+ response.statusText, response.data)
token = response.data.token
resolve(token)
})
.catch((error) => reject(error) )
});
}
您的函数 getToken 没有 return 令牌。它 return 未定义。只需在 axios 前添加 'return'。