Bonjour,

J'ai créer un foreach d'un array :

{results:[
    {
        "id": 1,
        "title": "tache 1",
        "tags":[],
        "completed":0,
        "deleted":0
     },
     {
        "id": 1,
        "title": "tache 1",
        "tags":[],
        "completed":0,
        "deleted":0
     }
 ]}

Je dois remplir tags avec des info récupérer dans une base de donnée, mais mon problème c'est que la function du waterfall retourne le callback sans attendre que mon foreach et mes query soient fini....

async.waterfall([
    function (callback) {
        /*  .....traitement des infos.....  */
        callback(null, data)
    },
    function (data, callback) {
      data.results.forEach(function(el) {
        var tags = []
        let SQLquery =
        `SELECT tags.id, tags.title, tags.color
        FROM todo_tags as tags
        LEFT JOIN element_element as tt ON tt.fk_target = tags.id AND tt.sourcetype = 'todo_tasks' AND tt.targettype = 'tag'
        WHERE tt.fk_source = ${el.id}`

        db.mysqlp.query(SQLquery)
        .then(function(rows){
          rows.forEach(function(tag) {
            console.log(tag)
            tags.push(
              {
                id: tag.id,
                title: tag.title,
                color: tag.color
              }
            )
          })
        })
        .catch(function(error){
          console.log('getTasksByCat state 2: ', error)
        })
      })
      console.log(data)
      callback(null, data)
    }
  ], function (err, result) {
    if(!err) {
      res.writeHead(200, {'Content-Type': 'application/json; charset=utf-8'})
      res.end(JSON.stringify(result))
    }
    else {
        console.log(err)
        res.sendStatus(400)
    }
  })

Avez-vous une idée pour résoudre ce problème ?
Merci :)

Aucune réponse