2015-09-09 2 views
1

У меня проблемы с получением крюка afterBulkCreate для работы с использованием обещаний. Его увольняют, но я получаю странные ошибки. Я не знаю, есть ли это из Модели или из исполняемых обещаний.sequelize.js hook afterBulkCreate iteration

После того, как массовое создание должно пройти через все экземпляры и выполнить некоторые дополнительные обещания. Я добавляю их в массив обещаний и жду, пока они все не закончат и не разрешат главное обещание. Является ли код в порядке? Кто-нибудь видит ошибки?

'use strict'; 

var Q = require('q'); 
var _ = require('lodash') 


module.exports = function(sequelize, DataTypes) { 
    var Transaction = sequelize.define('transaction', { 

    // fields defined 

    },{ 
    hooks: { 
     afterBulkCreate: function(transactions, options) { 
     console.log('after afterBulkCreate transaction') 
     var promiseArray = []; 
     _.each(transactions,function(value,index){ 
      var promiseone = sendOfApromsie(value.id) 
      promiseArray.push(promiseone) 
      // second promise 
      var promisetwo = sendOfApromsie(value.id) 
      promiseArray.push(promisetwo) 
     }) 

     Q.all(promiseArray).then(function(){ 
      sequelize.Promise.resolve() 
     }) 

     } 
    } 
    }); 

    return Transaction; 
} 

ответ

0

Вам необходимо вернуть обещание на крючок, чтобы дождаться его. Кроме того, можно сделать код намного проще, принимая д и lodash из картины:

var Transaction = sequelize.define('transaction', { 

    // fields defined 

    },{ 
    hooks: { 
     afterBulkCreate: function(transactions, options) { 
     return sequelize.Promise.map(transactions,function(value,index){ 
      var promiseone = sendOfApromsie(value.id) 
      // second promise 
      var promisetwo = sendOfApromsie(value.id) 
      return sequelize.Promise.join(promiseone, promisetwo) 
     }) 
     } 
    } 
    }); 

По картографированию через массив сделок, вы возвращаете новое обещание - которое содержит два обещания - и сразу все те будут решены, крюк сделан

+0

Thx для помощи. Я использую Q, потому что пресекрестная документация не очень хороша. Пример вроде этого действительно помогает. Спасибо – Tino