Pouchdb 如何将附件放入 for 循环中?
Pouchdb how can I putAttachment in a for loop?
我想添加几个附件,我可以成功添加一个,但是在循环时,它只会保存一张图片:5.png并出现冲突错误:
function addNewDoc() {
db.get('my0112doc', function(err, doc) {
if (err) {
return console.log(err);
}
// var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
var blob =imgSoucrce30m;
var attachment = {
content_type: 'image/png',
data: blob
}
for (var i = 5; i >= 0; i--) {
var nameImg=i+'.png';
db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
});
}
});
}
====================新方案======================= =================
在我的函数中,我已经指定了它的修订版本_rev,但冲突仍然发生。我不明白为什么。
CustomPouchError {状态:409,名称:"conflict",消息:"Document update conflict",错误:真}
function addNewDoc() {
db.get('my0112doc', function(err, doc) {
if (err) {
return console.log(err);
}
// var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
var blob = imgSoucrce30m;
addAttachment(5,doc._rev,blob);
});
}
function addAttachment(counter,revId,blob) {
var nameImg = counter + '.png';
db.putAttachment('my0112doc', nameImg, revId, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
if (counter >= 0) {
addAttachment(counter - 1,revId,blob);
}
});
}
所以问题是 putAttachment
是异步的。所以需要等它解决了再放。我不确定它 returns 是否是一个承诺,但如果不是,你可以这样做:
function addAttachment(counter) {
var nameImg= counter + '.png';
db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
if (counter >= 0) {
addAttachment(counter - 1);
}
});
}
addAttachment(5);
您也可以使用 promises 做一些事情,但这只会在前一个 put 完成时调用下一个迭代。一旦计数器为负,它就会停止,就像您的 for loop
.
您可能想尝试阅读 We have a problem with promises,尤其是有关 "how do I use forEach() with promises?" 的部分 您可能想使用 Promise.all()
,因为 PouchDB 的 API returns 承诺.
我想添加几个附件,我可以成功添加一个,但是在循环时,它只会保存一张图片:5.png并出现冲突错误:
function addNewDoc() {
db.get('my0112doc', function(err, doc) {
if (err) {
return console.log(err);
}
// var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
var blob =imgSoucrce30m;
var attachment = {
content_type: 'image/png',
data: blob
}
for (var i = 5; i >= 0; i--) {
var nameImg=i+'.png';
db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
});
}
});
}
====================新方案======================= =================
在我的函数中,我已经指定了它的修订版本_rev,但冲突仍然发生。我不明白为什么。
CustomPouchError {状态:409,名称:"conflict",消息:"Document update conflict",错误:真}
function addNewDoc() {
db.get('my0112doc', function(err, doc) {
if (err) {
return console.log(err);
}
// var blob = base64toBlob(imgSoucrce30m, 'image/png', 1024);
var blob = imgSoucrce30m;
addAttachment(5,doc._rev,blob);
});
}
function addAttachment(counter,revId,blob) {
var nameImg = counter + '.png';
db.putAttachment('my0112doc', nameImg, revId, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
if (counter >= 0) {
addAttachment(counter - 1,revId,blob);
}
});
}
所以问题是 putAttachment
是异步的。所以需要等它解决了再放。我不确定它 returns 是否是一个承诺,但如果不是,你可以这样做:
function addAttachment(counter) {
var nameImg= counter + '.png';
db.putAttachment('my0112doc', nameImg, doc._rev, blob, 'text/plain', function(err, res) {
if (err) {
return console.log(err);
}
if (counter >= 0) {
addAttachment(counter - 1);
}
});
}
addAttachment(5);
您也可以使用 promises 做一些事情,但这只会在前一个 put 完成时调用下一个迭代。一旦计数器为负,它就会停止,就像您的 for loop
.
您可能想尝试阅读 We have a problem with promises,尤其是有关 "how do I use forEach() with promises?" 的部分 您可能想使用 Promise.all()
,因为 PouchDB 的 API returns 承诺.