如何使用MySQL插入以层叠样式使用promise.all?

时间:2018-07-07 23:30:18

标签: javascript mysql node.js promise es6-promise

我想使用Promise插入数据3表,但是我有一个问题。我想在任务表中插入数据,获取结果插入ID,在另一个表中插入该ID并获取此插入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);
    });

2 个答案:

答案 0 :(得分:1)

我看不到需要l,但为了获得更简洁的代码并避免嵌套Promise.all,我建议使用.then(),这是对promises的含糊语法,您的代码应如下所示:

async/await

答案 1 :(得分:0)

从承诺中获得任何回报都是可以的。

基于此,您还可以将代码修改为如下所示。

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是可行的方法。