我需要调用一个异步函数来获取我的授权 token 。在导出中,我想包含此 fn 的返回值。
我的第一次尝试:
const token = await sessionHandler.getToken();
export const httpService = axios.create({
...
headers: {
"auth-token": token
...
}
});
当然这是行不通的,因为 await
不在异步函数中。
所以我可以把它包装在一个异步函数中,对吧?不,因为我必须使用回调。然后我又不会在顶层导出,这也不起作用。
解决这个问题的最佳方法是什么?
最佳答案
这是不可能的。 导出必须以同步方式定义,您不能在导出前等待。
我建议您导出一个异步函数。如果您不想每次都请求 token ,您可以考虑保存它:
let token;
export const createHttpService = async () => {
token = token == null ? await sessionHandler.getToken() : token;
return axios.create({
/* ... */
headers: {
"auth-token": token
/* ... */
}
});
};
但是,如果这对你来说是可以接受的,我想我更愿意分离这个 token 的请求,让模块的消费者将它传递回 createHttpService
(并因此负责保存它)。
export const getToken = () => sessionHandler.getToken();
export const createHttpService = (token) => {
return axios.create({
/* ... */
headers: {
"auth-token": token
/* ... */
}
});
};
或者,如果您真的想在模块加载时需要 token ,您可以直接导出 promise 。但是,我建议要警惕模块加载时的副作用。
关于javascript - JS : Call async function before exporting something,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44566480/