我有一个函数,downloadAsync()
它返回一个 CommonJS 承诺(使用Q)。它可能以两种方式失败:
- 该文件已经可以下载,在这种情况下我们立即知道。
- 下载过程可能会失败,在这种情况下我们会在一段时间后知道。
在情况 (1) 中,由于我在任何异步发生之前就知道,我可以抛出异常。在情况(2)中,我不得不拒绝承诺。
我的问题是,我的 API 是否应该统一并且总是通过拒绝承诺来表示错误?或者我应该为立即确定的无效状态条件抛出异常?再举一个例子,如果用户向我传递了一个无效的参数,那么抛出错误似乎比拒绝承诺更明智。
弄清楚“异常”的承诺拒绝到底是多么的好,也很好;那里的使用是否与异常使用实践一对一地映射,或者我们是否也将其用于非异常故障?