如何将promise promise转换为自定义类型?

时间:2018-06-10 19:49:55

标签: promise ocaml reason bucklescript

嘿,我有这段代码

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

在catch中,错误字段包含一个字段code,我可以用它来获取有关错误的更多详细信息。

我正在尝试编写一个包装函数来将error转换为“自定义”类型,但我不知道该怎么做。

到目前为止,我(感谢贾里德)

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

如何添加额外检查以确保错误中存在code属性?

1 个答案:

答案 0 :(得分:1)

如果合适的话,一种方法是将数据结构视为JSON,并使用bs-json之类的JSON解码库,因为这些库旨在处理未知或不可靠的数据结构。

或者,您可以将每个字段键入为Js.Nullable.t,并在使用时分别进行测试。

尽管您可以避免使用promise错误进行错误处理,但这是首选,因为这不是一种类型安全的方法。请改用result类型,并将承诺错误视为异常。