问题描述
问题描述:
自己在将master分支插进一个分支的时候,再使用sequelize中的findOrCreate方法将数据插入(使用forEach循环数组),结果是数据库中有相关的数据,但是后台管理系统的却有时候是显示不出全部数据的
问题原因:
因为数据库操作异步进行的,所以当进行前面两个数据的查询和插入之后,就已经进行到了查询所有数据(返回给前台的操作了)这导致前台这个时候是显示不出第三条数据的(之后再进行第三条数据的查询和插入)
问题的解决:
使用promise,定义一个数组,将每次执行findOrCreate方法执行结束后的结果放进这个数组,然后使用promise.all让这个数组里面的所有promise执行结束后再去执行后面的操作,这个时候就可以控制三条数据都插入了再去执行查询操作
if (data === null) {
res.locals.returns = {
code: '0000',
data: null
};
next();
} else {
console.log('datagp:'+data)
let promiseArr = []
data.forEach((version, index, versionArr) => {
promiseArr.push(
repoVersionModel
.findOrCreate(
{
where: {version_name: version},
defaults: {
version_id: shortid.generate(),
version_name: version,
repo_id: repository_id,
}
})
)
})
Promise.all(promiseArr).then(data => {
console.log('data',data)
res.locals.returns = {
code: '0000',
data: data
};
next();
})
}
涉及知识点
promise.all()
参考
findOrCreate
findOrCreate











网友评论