【问题标题】:put an async await on an export在导出上放置异步等待
【发布时间】:2021-10-20 19:18:49
【问题描述】:
我想导出一个变量,但它被导出为空。我需要这个来等待数据被插入然后它会被导出,但是我做不到
let eventGuid = 0
let INITIAL_EVENTS = [];
let datas = "";
function getDatas(){
return fetch("http://localhost:3214/events")
.then((data) => data.json())
.catch((err) => console.log(err))
}
async function armazenar() {
datas = await getDatas();
}
async function api(){
await armazenar()
datas.forEach(element => {
INITIAL_EVENTS.push(element)
});
}
api()
export default INITIAL_EVENTS;
export function createEventId() {
return String(eventGuid++)
}
【问题讨论】:
标签:
javascript
asynchronous
async-await
【解决方案1】:
async function api(){
await armazenar()
datas.forEach(element => {
INITIAL_EVENTS.push(element)
});
}
api()
这个函数是一个异步函数 api(),但没有 await api()。如果这可以解决您的问题,但您应该解决它。
【解决方案2】:
首先,有必要对导出语句进行一些解释。导出的目的是在节点执行的构建过程中使代码可用于其他文件。 export 不会做的是将变量的值提供给其他文件中的代码。简而言之,export 不是在运行时运行的动态特性。
我将只导出一个异步默认函数,如下所示。
let eventGuid = 0
function getDatas(){
return fetch("http://localhost:3214/events")
.then((data) => data.json())
.catch((err) => console.log(err))
}
export default async function () {
return await getDatas();
}
export function createEventId() {
return String(eventGuid++)
}
现在您需要在其他文件中导入我们的默认函数,然后执行它。请注意,这样的异步函数会返回一个 Promise。包含初始事件的数组将是后者在解析时返回的结果。