为了账号安全,请及时绑定邮箱和手机立即绑定

带 for 循环的多个 Async Await

带 for 循环的多个 Async Await

手掌心 2023-07-20 10:09:10
我想使用 async/await 运行多个函数,包括 for 循环。该循环还需要相互运行才能完成。目前我正在使用此功能,但似乎无法正常工作。对于 for 循环查询,我需要在第一个查询中创建的 id 来执行它。const createStudent = async (studentObj) => {    try {        await database.action(async () => {            const newStudent = await studentCollection.create(student => {                student.name = studentObj.name                student.age = studentObj.age            })            for (let contactObj of studentObj.contacts) {                try {                    await contactCollections.create(contact => {                        contact.student_id = newStudent.id                        contact.type = contactObj.type                        contact.contact = contactObj.contact                    })                } catch (error) {                    console.log(error);                }            }        })    } catch (error) {        console.log(error);    }}目前我收到错误[WatermelonDB] The action you're trying to perform (unnamed) can't be performed yet, because there are 2 actions in the queue. Current action: unnamed. Ignore this message if everything is working fine. But if your actions are not running, it's because the current action is stuck. Remember that if you're calling an action from an action, you must use subAction(). See docs for more details.
查看完整描述

1 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

是的你是对的!。它不能与多个数据库创建记录请求一起正常工作。

每当您在一项操作中进行多个更改(创建、删除或更新记录)时,您应该对它们进行批处理。

你可以这样做:

const batchActions = [];


for (let contactObj of studentObj.contacts) {

  batchActions.push(

    contactCollections.prepareCreate(contact => {

      contact.student_id = newStudent.id

      contact.type = contactObj.type

      contact.contact = contactObj.contact

    })

  )

}


database.batch(batchActions)


查看完整回答
反对 回复 2023-07-20
  • 1 回答
  • 0 关注
  • 175 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信