2

嘿,我有这段代码

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属性存在于错误中?

4

1 回答 1

1

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

或者,您可以将每个字段键入为 aJs.Nullable.t并在使用时单独测试它们。

尽管如果您可以避免使用承诺错误来进行错误处理,那将是更可取的,因为它不是一种类型安全的方法。请改用该result类型并将 promise 错误视为异常。

于 2018-06-19T22:49:46.340 回答