Pouchdb query not filtering KEY when turning on the device

Hello I have this pouchdb query:

function(test, key){
        var temp = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
        var day = [];

        $q.when(cigdb.query('learnIndex/by_data_type',{key: key, include_docs : true})).then(function(res){
                $q.all(res.rows.map(function(row){
                    console.log(row.doc);
                    day.push(row.doc.day);
                    return temp[row.doc.hour]++;
            }));
        }).then(function(te){
            day = day.unique();
            console.log(day);
            test.splice(0,24);
            for(var i = 0; i<24; i++){
                if(day.length > 0){
                    test.push(temp[i]/day.length);
                }else{                    
                    test.push(temp[i]);
                }
            }
            console.log(test);
            return test;
        }).catch(function(err){
            console.log(err); 
        }); 
    },

which works well on the browser but when debugging it on the device (android) it jumps part of the code.

On the device it executes until the $q.all(...) then it ignores completely the block :

 console.log(row.doc);
 day.push(row.doc.day);
 return temp[row.doc.hour]++;

And keeps going executing the promise .then(function(te) as nothing was wrong

obs: my first work with js angular and ionic not really familiar with that

Thanks for any help

edit: I already did try whith Promise.all(...) and putting a return before $q.all(...) and Promise.all(...)

and on all of then did work on the browser but on the device the problem was the same.

edit2 : so after diging a bit if i send on console.log(res) just before $q.all() it returns :

Object {total_rows: 32, offset: 0, rows: Array[0]}
offset: 0
rows:    Array[0]
total_rows: 32
__proto__: Object

while on the browser i have:

Object {total_rows: 11, offset: 0, rows: Array[10]}
offset: 0
rows: Array[10]
total_rows: 11
__proto__: Object

for some reason pouchdb is not populating the row

edit3:

changing the code:

q.when(cigdb.query('learnIndex/by_data_type',{key: key, include_docs : true})).then(function(res){
                $q.all(res.rows.map(function(row){
                    day.push(row.doc.day);
                    return temp[row.doc.hour]++;
            }));

for :

$q.when(cigdb.query('learnIndex/by_data_type',{include_docs : true})).then(function(res){
                return $q.all(res.rows.map(function(row){
                    if(row.doc.data_type === key){
                    day.push(row.doc.day);
                    return temp[row.doc.hour]++;
                    }
                }));

makes it work but now i dont get why the key is not filtering as supposed on de device what makes the query useless as i could use a simple alldocs if i have to implement the filtering any way.

As others have said, you need a return before the $q.all(). You might want to read this article on promises to catch up on common anti-patterns: We have a problem with promises.

As for the key issue, it depends on what your map function for by_data_type is doing. Whatever is the first argument to emit(), that's your key. If you need to debug, then you can omit the key parameter and check the rows object on the result. Each row will contain a key object so you can see what the key is.

You may also want to check out pouchdb-find. It's a lot easier, especially if your map function is pretty straightforward.