Лучшая обработка ошибок с обещаниями? - PullRequest
0 голосов
/ 16 мая 2018

В настоящее время я экспериментирую с функциями Google Firebase для доступа к API Google.Он работает нормально, но я немного растерялся, пытаясь управлять ошибками, которые могли быть обнаружены ...

В функциях .HTTPS getGoogleUsers я хотел бы вернуть код состояния HTTP (200 или ошибкакод) и данные (или сообщение об ошибке)

Насколько я вижу, я могу получить ошибки:

  • из функции connect() (500:Внутренняя ошибка сервера или 401 не авторизован)

  • из функции listUsers() (500: внутренняя ошибка сервера или 400 неверный запрос)

Am Iполностью или частично неправильно?какой должна быть моя стратегия в этом случае?спасибо за отзыв ..

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

const {google} = require('googleapis');
const KEY = require('./service-key.json');

 // Create JSON Web Token Client
 function connect () {
  return new Promise((resolve, reject) => {
    const jwtClient = new google.auth.JWT(
      KEY.client_email,
      null,
      KEY.private_key,
      ['https://www.googleapis.com/auth/admin.directory.user'],
      'adminuser@mydomain.com'
    );
    jwtClient.authorize((err) => {
      if(err) {
        reject(err);
      } else {
        resolve(jwtClient);
      }
    });
  });
}

function listUsers (client) {
  return new Promise((resolve, reject) => {
    google.admin('directory_v1').users.list({
      auth: client,
      domain: 'mydomain.com',
    }, (err, response) => {
      if (err) {
        reject(err);
      }
      resolve(response.data.users);
    });
  });
}

function getAllUsers () {
  connect()
    .then(client => {
      return listUsers(client);
    })
    .catch(error => {
      return error;
    })
}
exports.getGoogleUsers = functions.https.onRequest((req, res) => {
  const users = getAllUsers();
  if (error) {
     status = error.status;
     data = error.message;
  } else {
    status = 200;
    data = users;
  }
  res.send({ status: status, datas: data })
});

1 Ответ

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

Я думаю, что вы ищете

function getAllUsers () {
  return connect().then(listUsers);
//^^^^^^
}

exports.getGoogleUsers = functions.https.onRequest((req, res) => {
  getAllUsers().then(users => {
    return {status: 200, datas: users};
  }, error => {
    return {status: error.status, datas: error.message};
  }).then(response => {
    res.send(response);
  });
});

При этом используется метод .then(…, …) с двумя обратными вызовами , чтобы различать успех и случай ошибки и ждать результата обещания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...