当我需要将异步/等待嵌入到JavaScript中的forEach()中时如何使用

时间:2018-12-06 00:51:23

标签: json promise async-await sequelize.js

我知道这将无法按照我编写的方式进行,并且我也看不到任何能为我解决问题的答案。该代码太长,无法在此处放置,但我已经包含了要点的链接

https://gist.github.com/dhawkinson/41211d067ea91e0b7a5823067d2e39fe

我的问题是这样

我得到json文件的ID列表,这些ID必须被读取并转换为Multiple SQL表中的行。该列表以ID数组的形式来自另一个json文件到我需要读取和转换的文件。

根据要求,SQL表中不能包含带有冗余数据的行。 SQL的ID是自动生成的。 API中有3类实体:

  1. 学习者-学习课程的学生
  2. 课程-提供给学习者的培训机会(他们的孩子代表细节)
  3. 结果-学习者在特定日期参加课程的交集(他们的孩子代表详细信息)

学习者和课程都可能在结果中出现多次,但在特定日期只能出现一次。但是,“学习者”和“课程”都只能分别在“学习者”和“课程”表中出现一次(没有冗余)。

我的源数据是4个json结果,与列表中的4个ID相匹配。高级视图如下(格式:Course_TimeStamp.json)

  • id = 5sM5YLnnNMN_1525523468000.json(学习者= daffy@duck.com)
  • id = 5sM5YLnnNMN_1527517868000.json(学习者= yogi@bear.com)
  • id = 6tN6ZMooONO_1530730049000.json(学习者= daffy@duck.com)
  • id = 6tN6ZMooONO_1541011649000.json(学习者= foghorn@leghorn.com)

当我解析并写入数据时,我得到:

  • 3个学习者行(按预期)
  • 3个课程行(1个是多余的,不允许)
  • 4个结果行(按预期)
  • 课程和成果的孩子都按预期编写。

鉴于我的限制,我该如何解决此问题?我怀疑在一些晦涩的情况下,冗余问题可能会出现在“学习者”表中,尽管目前还没有。我对所有表都使用相同的方法。

我们非常感谢您的帮助。抱歉,冗长。

1 个答案:

答案 0 :(得分:1)

您不能对forEach使用异步/等待

  

原因::因为我们无法在同步函数中使用await。如您所见,“ processArray”是异步函数。但是匿名   我们用于forEach的功能是同步的。 DO READ

questions.forEach((question) => {
    processCourseDetails(jsonData, question);
});

您可以使用简单的for循环,例如

for(question of questions) {
    await processCourseDetails(jsonData, question);
}
  

您可以创建一个自定义函数,使其与forEach一起使用async / await   , DO READ