我有一个网页,其中包含用户可以编辑个人信息,教育,工作历史等的表单。 并且用户可以添加多个度数,例如: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
?
答案 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
})