多个异步等待 for 循环

Multiple Async Await with for loop

我想 运行 多个函数 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.

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

Whenever you make more than one change (create, delete or update records) in an action, you should batch them.

参见:https://nozbe.github.io/WatermelonDB/Actions.html

你可以这样做:

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)

希望这能解决您的问题