我试图理解一些关于JS标准的东西:
在编写异步函数或任何返回任何类型承诺的函数时,我需要假设该函数的用户希望捕获拒绝,而不希望在resolve中出现布尔值:
好:
doSomething = async () => {
...
if (failed)
reject(error)
resolve("yay")
}
try {
await doSomething()
console.log("yay worked")
}
catch (error){
}
坏:
doSomething = async () => {
...
if (failed)
resolve(false)
resolve(true)
}
didWork = await doSomething()
if (didWork){
console.log("yay")
else {
}
但是我的问题是关于非异步函数,返回true/false作为成功/失败的指示器被认为是一个坏习惯吗? 还有其他表示成功/失败的好方法吗? 另外,告诉我,我的假设在你眼中是否正确。
谢谢!
异步函数和非异步函数实际上是一样的:
true
/false
可以是所提问题的合法答案例如,如果函数的目的是确定字符串是否为数值,则返回值true
和false
具有明显的含义。 但是,如果您传入的是一个对象,而这个对象一开始就不是一个字符串,那么一个异常是合适的,因为对于一个对象,问题“is this string numeric”的答案是“mu”。
对于一个异步函数来说,这也是正确的:如果需要一个网络请求来获得某个问题的true
/false
答案,那么用true
/false
来解析承诺是完全错误的; 例如,如果您正在向服务器检查输入的用户名是否仍然可用,“是”和“否”是有效答案。 但是,如果网络请求本身失败,那将是一个异常的失败,一个“MU”,您需要通过拒绝整个承诺来发出信号。
拒绝承诺只是一个异步异常; 使用await
语法,它甚至可以与同步异常一样进行处理。 异常用于异常事件,当由于超出正常快乐路径的情况而无法提供正常答案时。