вставьте документ в несколько экземпляров кушетки DB в Node JS со всеми возможными результатами успеха и неудачи любым возможным способом - PullRequest
0 голосов
/ 28 мая 2018

у меня есть массив дб, как

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++;
                })
            }
        })

что можетбыть наилучшим способом достижения этого с помощью модуля обещания или асинхронного модуля или чего-либо еще.

1 Ответ

0 голосов
/ 28 мая 2018

В следующем примере мы должны использовать 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
  });
...