跳到主要内容

错误

SDK 抛出的每一个错误都继承自 PlaneError,下面的每一个类都是从包的根部导出的。

错误由谁抛出什么时候
PlaneApiErrorv2API 返回了一个错误:一个 RFC 9457 问题详情(problem detail)
NoMatchFoundErrorv2一次 findBy* 查找没有匹配到任何行
MultipleMatchesFoundErrorv2一次 findBy* 查找匹配到了多于一行
PlaneNetworkErrorv2请求从未到达服务器:连接被拒绝、DNS 解析失败、超时……
MissingPathIdErrorv2因为缺少某个路径 id,URL 无法被构建出来
HttpErrorv1一次 v1 请求失败:状态码、响应体和响应头
AttachmentTooLargeErrorv1workItems.attachments.download 超过了它的 maxBytes

这七个错误都直接继承自 PlaneError。需要特别注意的是,查找类错误不是 PlaneApiError 的子类,所以 仅捕获 PlaneApiError 并不能捕获它们。

PlaneApiError​

PlaneApiError 把问题详情携带为 .status、.type、.code、.detail 和 .errors,其中 .errors 是 服务器返回的按字段划分的校验错误。

import { PlaneApiError, PlaneNetworkError } from "@hoyasumii/plane";

try {
await client.v2.workspaces.projects.states.create("acme", "ENG", { name: "", color: "#000000" });
} catch (error) {
if (error instanceof PlaneApiError) {
console.log(error.status, error.code, error.detail, error.errors);
} else if (error instanceof PlaneNetworkError) {
console.log("unreachable:", error.message, error.cause);
} else {
throw error;
}
}

一次批量写入即使某些行失败,也会返回 HTTP 200。v2.raiseForFailures(result) 会把一次失败转换成一个 PlaneApiError(参见 成员关系与批量写入)。