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

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

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 существует в ошибке?


person ThomasThiebaud    schedule 10.06.2018    source источник


Ответы (1)


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

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

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

person glennsl    schedule 19.06.2018