Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Should api reject an Error Object? #217

Closed
hitbear518 opened this issue Jun 1, 2017 · 4 comments
Closed

Should api reject an Error Object? #217

hitbear518 opened this issue Jun 1, 2017 · 4 comments

Comments

@hitbear518
Copy link
Contributor

While using shareToSession, if I click close button in Wechat, I got a waring: a promise was rejected with a non-error: [object Number], I figured out that it rejected -2, which correspond to WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */, so should this kind of api reject an Error Object?
image

使用 shareToSession api 时,如果点击微信左上角的关闭,promise 会 reject -2,这里需要改成 reject Error 对象吗?

@hitbear518 hitbear518 changed the title Should Api reject an Error Object? Should api reject an Error Object? Jun 1, 2017
@anjianshi
Copy link
Contributor

Promise 规范其实并没有要求必须 reject Error 对象,不过为了便于排查问题,一些类库例如 bluebird 会要求 reject Error 对象。
可以考虑自定义一个 Error 对象,这样也确实更便于调试。

function WechatError(code) {
    this.code = code
    this.message = 'wechat error ' + code
}
WechatError.prototype = Error.prototype

@yorkie
Copy link
Owner

yorkie commented Jun 9, 2017

+1 @hitbear518 可以提个PR吗?

@anjianshi
Copy link
Contributor

anjianshi commented Jun 9, 2017

@yorkie 感觉在错误处理方面的设计有点不清晰啊。

README 里介绍 sendAuthRequest 等接口的返回值时,说 errCode 为 0 代表操作成功,如果失败了则可以通过 errStr 读取失败信息。

这样说,就暗示使用者应该通过 errCode 来判断操作是否成功,使用者也会想当然觉得不需要通过 promise.catch() 来捕获这类错误。

但按照当前的实现,使用者其实应该通过 promise.catch() 来捕获错误,而不是在 promise.then() 里读取 errCode。
这一点在 README 里没有说明。虽然示例代码里是通过 catch 来捕获错误的,但用户未必想到这里捕获到的错误就是因 errCode 不为 0 而抛出的错误,他可能会以为这个 catch 只是用来处理一些不可预见的意外情况。(我就一直是这么以为的,直到看了 react-native-wechat 的实现代码)

是否可以调整一下,干脆在 errCode 不为 0 时也正常 resolve promise?把对这方面的检查交给用户自己处理。
或是调整一下文档里的说明,表示在 errCode 不为 0 时,promise 会 reject 一个 WechatError 之类的对象?

@yorkie
Copy link
Owner

yorkie commented Jun 9, 2017

这个问题确实存在,原因是之前在 #138 没有对文档也做出对应的更新,多谢提醒,一会更新下文档 :)

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants