如何使用promise.all使用mysql insert来级联样式?

wqsoz72f  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(364)

我想用promise插入数据3表,但我遇到了一个问题。我想在tasks表中插入数据,得到结果insert id,在其他表中插入该id,然后得到这个insert id,在其他表中插入该id。我想用promise.all函数来做这件事。这是我的代码。

addClientTable(insertTask)
    .then(client_res => {
        return client_res.insertId;
    })
    .then(clientInsId => {
        insertTask.task.client_id = clientInsId;
        addTaskTable(insertTask)
            .then(task_res => {
                if (insertTask.task.connection == 0) {
                    updateTaskConnection(task_res.insertId)
                        .then(res => {
                            console.log(res);
                        })
                        .catch(err => {
                            console.log(err);
                        })
                }
                return task_res.insertId;
            })
            .then(taskInsId => {

                addTaskUsersTable(user_ids, taskInsId, clientInsId)
                    .then(result => {
                        resolve(result);
                    })
            })
            .catch(err => {
                reject(err);

            })
    })
    .catch(err => {
        reject(err);
    });
yqkkidmi

yqkkidmi1#

任何承诺的回报都是可以实现的。
在此基础上,您还可以修改您的代码如下所示。

addClientTable(insertTask)
    .then(client_res => {
        return client_res.insertId;
    })
    .then(clientInsId => {
        insertTask.task.client_id = clientInsId;
        return addTaskTable(insertTask)
    })
    .then(task_res => {
        if (insertTask.task.connection == 0) {
            updateTaskConnection(task_res.insertId)
                .then(res => {
                    console.log(res);
                })
                .catch(err => {
                    console.log(err);
                })
        }
        return task_res.insertId;
    })
    .then(taskInsId => {
        return addTaskUsersTable(user_ids, taskInsId, clientInsId)
    })
    .then(result => {
        resolve(result);
     })
    .catch(err => {
        reject(err);
    });

尽管使用async/await是一种可行的方法。

p1tboqfb

p1tboqfb2#

我认为没有必要 Promise.all 但是为了更干净的代码和避免嵌套 .then() ,我建议 async/await ,承诺的甜言蜜语语法,您的代码应该如下所示:

async function myFn (){
  const clientInsId = await addClientTable(insertTask).insertId;

  insertTask.task.client_id = clientInsId;

  const task_res = await addTaskTable(insertTask);
  let res;

  if (insertTask.task.connection == 0) {
    res = await updateTaskConnection(task_res.insertId);
    console.log(res);
  }

  const result = await addTaskUsersTable(user_ids, taskInsId, clientInsId);

  return result;
};

myFn()
  .then(data => console.log(data))
  .catch(err => console.log(err))

相关问题