繁体   English   中英

Flowtype函数可能会抛出错误

[英]Flowtype function can throw error

有没有办法定义一个函数显式可以抛出,显然任何函数都可以抛出错误。 但是我想明确定义一个函数被设计为抛出并且可能根本不返回值。

async function falseThrow (promise: Promise<any>, error): any {
  let value: any = await promise
  if (!value) throw error
  return value
}

正如Nat Mote在她的回答中强调的那样,没有办法在流程中对已检查的异常进行编码。

但是,如果您愿意稍微更改编码,则可以执行相同的操作:

async function mayFail<A, E>(promise: Promise<?A>, error: E): E | A {
  let value = await promise
  if (!value) {
    return error
  }
  return value
}

现在flow将强制用户处理错误:

const p = Promise.resolve("foo")
const result = await mayFail(p, Error("something went wrong"))

if (result instanceof Error) {
  // handle the error here
} else {
  // use the value here
  result.trim()
}

如果你尝试做类似的事情

const p = Promise.resolve("foo")
const result = await mayFail(p, Error("something went wrong"))
result.trim() // ERROR!

flow会阻止你,因为你没有检查resultError还是string ,所以调用trim不是一个安全的操作。

Flow不支持已检查的异常。 它不会尝试模拟可能抛出的函数或可能引发的错误类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM