少数异步函数后的一个响应

时间:2017-09-22 17:22:00

标签: mysql node.js rest architecture

我有一个网页,其中包含用户可以编辑个人信息,教育,工作历史等的表单。 并且用户可以添加多个度数,例如:bs,ms,phd。还有一些工作岗位。

当用户推送'保存'按钮我将所有这些数据发送到我的服务器。我在一个请求中发送所有内容。在服务器中,我有一个点来处理请求。

app.post(config.version + '/profile', (req, res, next) => {});

我在那里做了一些MySQL查询来插入/更新/删除数据。我使用来自npm的mysql包来做到这一点。

new Promise((resolve, reject) => {
    const userQuery = `INSERT INTO user ...;`;
    const degreesQuery = 'INSERT INTO degree ...;';
    const positionsQuery = 'UPDATE position SET ...;';

    this.connection.query(userQuery, err => {});
    this.connection.query(degreesQuery, err => {});
    this.connection.query(positionsQuery, err => {});

    resolve({});
})

最后我做resolve({})但是我想选择更新的配置文件并将其发回(因为在MySQL表格中我添加了ID,这有助于我不再插入重复数据)。所以,我的问题是,只有在我的所有异步resolve({})完成后才能执行this.connection.query

1 个答案:

答案 0 :(得分:2)

我的建议是在Promise.all()中运行所有查询。

示例:

const queries = [
    `INSERT INTO user ...;`;,
    'INSERT INTO degree ...;',
    'UPDATE position SET ...;'
];

Promise.all(queries.map((query) => {
    return new Promise((resolve, reject) => {
         this.connection.query(query, err => {
             return err ? reject(err) : resolve();
         });
    });
})
.then(() => {
    // continue
    // get your updated data here with and send it as response
})

如果你的db库支持Promise就这样写

Promise.all(queries.map((query) => {
    return this.connection.query(query);
})
.then(() => {
    // continue
    // get your updated data here with and send it as response
})