我将async方法的返回类型定义为 Promise<字符串> 使用流式
如果我添加一个try catch循环,它就不起作用。
请点击示例,查看在flow.org/try
上运行的代码示例1不起作用 - Code
async function foo(): Promise<string> {
try {
return await 'foo'
} catch (e){ console.error(e) }
}
示例2工作 - Code
async function foo(): Promise<string> {
return await 'foo'
}
答案 0 :(得分:2)
你的catch
表示函数没有抛出,因此返回void
,所以如果你不想这样,那么你需要重新抛出错误,例如
try {
return await 'foo'
} catch (e){
console.error(e);
throw e;
}
以便Flow知道你只想要字符串返回值。
但显然问题是,为什么你首先要抓住它,而不是返回字符串并捕获所谓的foo
。
或者,如果您确实要报告错误,但返回一个字符串,该字符串应该是什么?你总能做到
try {
return await 'foo'
} catch (e){
console.error(e);
return "";
}
答案 1 :(得分:1)
“我想发布这个问题有助于我弄明白”
适用于Try / Catch Code
async function foo(): Promise<string | void> {
try{
return await 'foo'
} catch (e){ console.error(e) }
}
我在该类型中添加了 | void
。
原因是因为catch实际上返回的是一个等于void的未定义值。
但我仍然想知道简化类型代码的另一种方法是什么