解决forEach/master分支插入bug/promise.

2017-11-29  本文已影响12人  Gopal
问题描述

问题描述:
自己在将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

上一篇 下一篇

猜你喜欢

热点阅读