Sequelize - 从数组批量创建

Posted

技术标签:

【中文标题】Sequelize - 从数组批量创建【英文标题】:Sequelize - Bulk create from array 【发布时间】:2016-12-06 18:02:57 【问题描述】:

我有一个项目数组,需要将它们创建到 DB。

我需要检查每个插入是否成功,因此将项目 + 成功 = true 作为 json 插入新数组(结果)。

如果创建不成功 - 在项目之前(结果)插入相同的数组 + 成功 = false。

代码如下:

create_cards: function (filter_id, is_filter, cards) 
    var result = [];
    var curr_card = null;
    for (var card in cards) 
        curr_card = this.create( 
            filter_id: filter_id,
            template: card.template,
            state: card.state,
            question_id: card.question_id || -1,
            answers: card.answers || -1,
            description: card.description || -1,
            correct_answer: card.correct_answer || -1
        ).then(function(card) 
            result.push(card: JSON.stringify(card.dataValues), success: true)
        ,function(err) 
            result.push(card: card.dataValues, success: false)
        );
    
    return results;

现在,两个问题:

    循环结束后有“返回结果”,但我得到空数组.. 每次创建后我应该如何进行批量创建和,以确保创建是否成功?

    我应该如何在错误功能中获取卡?我只得到'err'作为拒绝函数的变量。

谢谢!

【问题讨论】:

你需要多练习一下 promise,results 是空的,因为在调用 return results 之前没有任何 promise 被解析 @AramilRey 我知道这一点,但我不知道如何管理所有的承诺和回报。无论如何,谢谢! @Zvi 谢谢,对我帮助很大 【参考方案1】:

create_cards: function(filter_id, is_filter, cards) 
  var result = [];

  var promises = cards.map(function(card) 
    return this.create(
        filter_id: filter_id,
        template: card.template,
        state: card.state,
        question_id: card.question_id || -1,
        answers: card.answers || -1,
        description: card.description || -1,
        correct_answer: card.correct_answer || -1
      )
      .then(function() 
        result.push(
          card: card,
          success: true
        );
      )
      .catch(function(err) 
        result.push(
          card: card,
          success: false
        );
        return Promise.resolve();
      );
  );

  return Promise.all(promises)
    .then(function() 
      return Promise.resolve(result);
    );

【讨论】:

以上是关于Sequelize - 从数组批量创建的主要内容,如果未能解决你的问题,请参考以下文章

在mysql Sequelize + Nodejs中将数组和对象转换为批量插入

如何使用 Sequelize 和 node.js 进行批量插入

sequelize模型

使用 Node.js/Sequelize 进行批量插入时 PostgreSQL 崩溃

Sequelize:批量插入

sequelize 批量添加数据