Как привести ошибку обещания к пользовательскому типу?

Эй, у меня есть этот кусок кода

BsFirebase.Auth.signInWithEmailAndPassword(
  Firebase.auth,
  ~email=self.state.email,
  ~password=self.state.password,
)
|> Js.Promise.then_(_user => {
  // ...
})
|> Js.Promise.catch((error) => {
  // ...
})
|> ignore;

В улове поле ошибки включает в себя поле code что я могу использовать, чтобы получить более подробную информацию об ошибке.

Я пытаюсь написать функцию-обертку для приведения error к "пользовательскому" типу, но я понятия не имею, как это сделать.

Пока у меня есть (спасибо Джаред)

type firebaseError = {"code": int, "message": string}; /* etc. */
external unsafeCeorceToFirebaseError: Js.Promise.error => firebaseError = "%identity";

Как я могу добавить дополнительную проверку, чтобы убедиться, code свойство существует в ошибке?

1 ответ

Одним из способов было бы рассматривать структуру данных как JSON, если это уместно, и использовать библиотеку декодирования JSON, такую ​​как bs-json поскольку они предназначены для работы с неизвестными или ненадежными структурами данных.

Кроме того, вы можете ввести каждое поле как Js.Nullable.t и проверить их индивидуально при использовании.

Хотя, если вы можете избежать использования ошибок обещаний для обработки ошибок, это было бы гораздо предпочтительнее, так как это не типобезопасный способ сделать это. Использовать result вместо этого введите ошибки обещания как исключения.

Другие вопросы по тегам