将文档插入到Node JS中的多个沙发数据库实例中,以任何可能的方式获得所有成功和失败

时间:2018-05-28 17:46:08

标签: node.js promise couchdb async.js couchdb-nano

我有像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模块或其他任何东西实现此目的的最佳方法是什么。

1 个答案:

答案 0 :(得分:0)

在以下示例中,我们必须使用Array.mappromise的每个元素创建一个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()

返回一个Promise
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
  });