Как привести ошибку обещания к пользовательскому типу? - PullRequest
0 голосов
/ 10 июня 2018

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

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 Ответ

0 голосов
/ 20 июня 2018

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

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

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

...