我有像db这样的数组
const dbArr = ["http://localhost:5984", "http://xyz_couchdb.com:5984"]
要插入的数据
let data ={
_id: 324567,
name: Harry,
gerder: male
}
这是我使用纳米模块的逻辑
return new Promise((resolve, reject) => {
let res = [];
let rej = [];
let counter = 0;
for(let i = 0; i < dbArr.length ; i++){
dbArr[i].insert(data, (err, body) => {
err ? rej.push(err) : res.push(body)
if(counter === obj.dbArray.length -1){
rej.length ? reject(rej) : resolve(res)
}
counter++;
})
}
})
使用promise或async模块或其他任何东西实现此目的的最佳方法是什么。
答案 0 :(得分:0)
在以下示例中,我们必须使用Array.map
为promise
的每个元素创建一个dbArr
,然后我们必须等待所有promises
以使用Promise.all结束。 catch
就在这里,所以我们处理错误。
function getAll(dbArr) {
return Promise.all(dbArr.map(x => x.insert(data)));
}
getAll(dbArr)
.then((rets) => {
// Handle the returns
// They are in an array
})
.catch((err) => {
// Handle the error
});
编辑:
在查看node-couchdb(我认为你使用的那个)的文档后,我看到了.insert()
方法没有返回Promise
但只返回回调。
所以我们必须转换方法,因此它将使用util.Promisify()
const {
promisify,
} = require('util');
function getAll(dbArr) {
return Promise.all(dbArr.map(x => promisify(x.insert)(data)));
}
getAll(dbArr)
.then((rets) => {
// Handle the returns
// They are in an array
})
.catch((err) => {
// Handle the error
});