NodeJS Promise Chaining: повторно использовать «затем» и объединить два обещания - PullRequest
0 голосов
/ 09 января 2019

У меня есть 2 обещания с одинаковыми условиями «тогда» и «поймать». Как я могу объединить их в одно обещание на основе условия?

Обещание 1

return new Promise((resolve, reject) => {
    abc.getDataFromServer(resp1)
        .then((result) => {
            .....
            resolve();
        })
        .catch((error) => {
            .....
            reject(error);
        });
});

Обещание 2

return new Promise((resolve, reject) => {
    abc.getDataFromDB(resp2)
        .then((result) => {
            .....
            resolve();
        })
        .catch((error) => {
            .....
            reject(error);
        });
});

Требуется цепочка обещаний

return new Promise((resolve, reject) => {
    if(condition){
       abc.getDataFromServer(resp)
    }else{
       abc.getDataFromDB(resp2)
    }
        .then((result) => {
            .....
            resolve();
        })
        .catch((error) => {
            .....
            reject(error);
        });
});

Каков наилучший способ достичь этого?

1 Ответ

0 голосов
/ 09 января 2019

Используйте условный оператор, основанный на condition, чтобы определить начальные Promise, а затем вызовите .then и .catch для него. Кроме того, избегайте использования явного антипаттерна Promise :

return (condition ? abc.getDataFromServer(resp) : abc.getDataFromDB(resp2))
  .then((result) => {
      .....
      // instead of resolve(someTransformedResult):
      return someTransformedResult;
  })
  .catch((error) => {
      .....
      // instead of reject(error):
      throw error;
  });
...