您好,我有这个pouchdb查询:
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);
});
},
在浏览器上运作良好,但在装置(android)上进行调试时
它跳了部分代码。
在设备上执行直到
$q.all(...)
然后它会完全忽略该块: console.log(row.doc);
day.push(row.doc.day);
return temp[row.doc.hour]++;
并继续执行诺言
.then(function(te)
,因为没有错obs:我对js angular和ionic的第一份工作不是很熟悉
谢谢你的帮助
编辑:
我已经尝试过连
Promise.all(...)
并在
$q.all(...) and Promise.all(...)
之前放一个返回然后所有这些都可以在浏览器上正常运行,但是在设备上,问题是相同的。
edit2:所以在挖掘了一点之后,如果我在
console.log(res)
之前发送$q.all()
,它将返回:Object {total_rows: 32, offset: 0, rows: Array[0]}
offset: 0
rows: Array[0]
total_rows: 32
__proto__: Object
而在浏览器上我有:
Object {total_rows: 11, offset: 0, rows: Array[10]}
offset: 0
rows: Array[10]
total_rows: 11
__proto__: Object
由于某些原因,pouchdb没有填充
row
编辑3:
更改代码:
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]++;
}));
为:
$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]++;
}
}));
使它工作,但现在我不明白为什么
key
不能按设备上的预期进行过滤是什么让查询无用,因为如果我必须以任何方式实现过滤,我都可以使用简单的
alldocs
。 最佳答案
正如其他人所说,在return
之前需要一个$q.all()
。您可能想阅读有关承诺赶上常见反模式的文章:We have a problem with promises。
至于key
问题,这取决于您map
的by_data_type
函数在做什么。不管emit()
的第一个参数是什么,这都是您的关键。如果需要调试,则可以省略key
参数,并检查结果中的rows
对象。每行将包含一个key
对象,因此您可以看到键是什么。
您可能还想签出pouchdb-find。这要容易得多,尤其是在您的map函数非常简单的情况下。
关于javascript - Pouchdb查询在打开设备时未过滤KEY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31952298/