Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: error handling logic #56

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

peerless-hero
Copy link

@peerless-hero peerless-hero commented Dec 1, 2024

  • Introduce UnError class to unify error handling
  • Replace existing error handling methods with UnError to encapsulate error information
  • Optimize code structure to improve consistency and readability of error handling

重构错误处理逻辑

  • 引入 UnError 类统一处理错误
  • 替换原有的错误处理方式,使用 UnError 封装错误信息
  • 优化代码结构,提高错误处理的一致性和可读性

Description 描述

经测试,uni.request、uni.uploadFile、uni.download等方法,即使服务器返回4xx、5xx等错误状态码,也只会触发success回调,只有客户端网络不通或者服务器证书配置错误等服务器完全无法返回响应的情况,才会触发fail回调。参考请求库axios的逻辑以上情况应该进入全局响应拦截器的失败回调而不是全局响应拦截器的成功回调。

此外,本PR也将修复一个存在很久的BUG:因网络问题导致的请求失败情况,在全局响应拦截器中的回调函数无法获得请求配置的问题。

Linked Issues 关联的 Issues

#49

Additional context 额外上下文

借鉴axios相关处理:
https://github.com/axios/axios/blob/v0.x/lib/adapters/xhr.js
https://github.com/axios/axios/blob/v1.x/lib/adapters/xhr.js

Summary by CodeRabbit

  • New Features

    • Introduced a centralized error handling mechanism for download, request, and upload functionalities using the UnError class, enhancing error reporting consistency.
  • Bug Fixes

    • Improved error handling logic to reject promises with detailed error information rather than populating response objects, leading to more reliable error management.

Copy link

coderabbitai bot commented Dec 1, 2024

Walkthrough

The changes introduced in this pull request involve the implementation of a new error handling mechanism across three adapter files: download.ts, request.ts, and upload.ts. Each file now imports the UnError class from the ../core/UnError module. The error handling in the fail callbacks of the respective uni.downloadFile, uni.request, and uni.uploadFile methods has been modified to reject promises with instances of UnError, encapsulating error details more effectively than the previous approach. Additionally, the response variable in the success callbacks is now declared as a constant.

Changes

File Path Change Summary
packages/core/src/adapters/download.ts Added import of UnError. Modified error handling in fail callback of uni.downloadFile to reject with UnError. Response variable declared as a constant.
packages/core/src/adapters/request.ts Added import of UnError. Modified error handling in fail callback of uni.request to reject with UnError. Response variable declared as a constant.
packages/core/src/adapters/upload.ts Added import of UnError. Modified error handling in fail callback of uni.uploadFile to reject with UnError. Response variable declared as a constant.

Poem

In the land of code, where errors roam,
A new friend named UnError finds a home.
With promises now clear, and details in tow,
Our downloads, requests, and uploads will glow!
So hop along, dear coder, with joy in your heart,
For handling errors is now a fine art! 🐇✨


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 6cddc6a and 4c70023.

📒 Files selected for processing (3)
  • packages/core/src/adapters/download.ts (3 hunks)
  • packages/core/src/adapters/request.ts (3 hunks)
  • packages/core/src/adapters/upload.ts (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/core/src/adapters/download.ts
  • packages/core/src/adapters/upload.ts
  • packages/core/src/adapters/request.ts

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

netlify bot commented Dec 1, 2024

Deploy Preview for uni-network ready!

Name Link
🔨 Latest commit 4c70023
🔍 Latest deploy log https://app.netlify.com/sites/uni-network/deploys/674ca47fda4f340008e6f65b
😎 Deploy Preview https://deploy-preview-56--uni-network.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 94 (🔴 down 1 from production)
Accessibility: 97 (no change from production)
Best Practices: 92 (no change from production)
SEO: 100 (🟢 up 8 from production)
PWA: -
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify site configuration.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Outside diff range and nitpick comments (1)
packages/core/src/adapters/download.ts (1)

Line range hint 1-67: Consider extracting common error handling logic

All three adapters (request, upload, download) share very similar error handling patterns. Consider extracting this common logic into a shared utility function to reduce code duplication and ensure consistent error handling across adapters.

Example implementation:

// utils/errorHandler.ts
export const createErrorHandler = <T extends UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask>(
  config: UnConfig,
  task: T | undefined
) => (err: UniApp.GeneralCallbackResult) => {
  return new UnError(err.errMsg, UnError.ERR_NETWORK, config, task);
};

// Usage in adapters
fail: createErrorHandler(config, task),
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 1146aa3 and 6cddc6a.

📒 Files selected for processing (3)
  • packages/core/src/adapters/download.ts (2 hunks)
  • packages/core/src/adapters/request.ts (2 hunks)
  • packages/core/src/adapters/upload.ts (2 hunks)
🔇 Additional comments (6)
packages/core/src/adapters/request.ts (2)

4-4: LGTM: Clean import addition

The UnError import is properly placed with other error-related imports, maintaining good code organization.


56-57: LGTM: Improved error handling implementation

The new error handling approach using UnError provides better error context and aligns with the PR's objective of standardizing error handling. The implementation correctly includes:

  • Error message from the original error
  • Network error code classification
  • Complete request configuration
  • Task reference for additional context
packages/core/src/adapters/upload.ts (2)

4-4: LGTM: Consistent import structure

The UnError import maintains consistency with other adapter files.


59-59: LGTM: Unified error handling for uploads

The error handling implementation maintains consistency with the request adapter while properly handling upload-specific task types.

packages/core/src/adapters/download.ts (2)

4-4: LGTM: Consistent import structure

The UnError import maintains consistency with other adapter files.


67-67: LGTM: Unified error handling for downloads

The error handling implementation maintains consistency with other adapters while properly handling download-specific task types.

- Introduce `UnError` class to unify error handling
- Replace existing error handling methods with `UnError` to encapsulate error information
- Optimize code structure to improve consistency and readability of error handling
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant