Interface request failure, part of the data in the interface is missing, operational data does not meet expectations... When our application is released and online, we begin to face these risks.
Once these problems lead to JavaScript errors (such as null pointer exceptions) and are not effectively isolated, they may cause online problems such as white screens on the page and inability to interact.
During the preparations for Double 11, we collected front-end related online issues in the past year. Among the 21 cases collected, half of the issues were related to the reason "data anomalies trigger page display exceptions".
How to isolate the impact of errors within a certain range is particularly important.
This article will talk with you about some of the solutions we have tried and the problems we encountered.
Starting with Null Pointer Exception
The most common problem caused by data is Null Pointer Exception.
var result = a.b.c.d;
Such code is like a landmine. Once a is a dynamic data, problems are about to occur.
Encapsulate a get method to get the value. When the data does not exist, undefined is returned, which can quickly avoid such problems.
var result = get(a, 'b.c.d'); 但如同我们期望大家在取值前,都先做判断一样,并不能保证所有人都这么用了,用不用全靠自觉。 if (a && a.b && a.b.c) { var result = a.b.c.d; }
So, we have the following solutions:
Asynchronous data verification
The idea of asynchronous data verification is to do a schema verification after data acquisition and before use to detect important data Missing and type mismatch exceptions.
Corresponding to this solution, we encapsulated the fetch-checker Note 1 component based on fetch.
fetch-checker forces users to provide the schema corresponding to the data when requesting data:
let schema = { "rule": { "type": "string", }, "banner": { "type": "object", "required": true, "default": { "url": "https://item.taobao.com/item.htm?id=527331762117" } } };
This schema needs to be described:
The type of each field
Whether the field is required
When required When fields are missing, do you need to base the data? After fetch-checker gets the data, it first performs a layer of verification. If necessary, it fills in the missing data and then returns it to the caller. In this way, the data obtained by the user must be in line with expectations.
However, the challenge facing this solution is:
How to ensure that the caller provides a complete schema description. If you don’t want to write a schema, you can provide a rough schema description to pass the verification.
How to streamline schema. That is to say, it will not have a big impact on the bundle size, and it can also meet the verification function.
Code Compilation
Inspired by babel, this solution is to convert code with NPE risks into equivalent safe code during the compilation phase. As shown below:
var a = {}; // input var result = a.b.c; // output var result = (_object2 = (_object3 = a) == null ? null : _object3.b) == null ? null : _object2.c;
When a is an empty object, executing the compiled code will return null , thus avoiding blocking subsequent processes due to code throwing errors.
In the Babel plug-in babel-plugin-safe-member-expression Note 2, we made the above attempt. Currently, in the cake project, this function can be selectively enabled through the configuration enableSafeMemberExpression.
This solution has a lower access cost in comparison, and developers do not need to make adjustments to the existing code, but there are still challenges:
Problems during the development phase are not easily exposed, and there is no feedback on scenarios where errors should be reported. The ideal state is: expose as many problems as possible during the development and debugging phase, and reduce errors as much as possible online.
How to define hidden codes? At present, all a.b calling methods will be compiled according to the above scheme. Although no problems have been found during the testing process, it is safer to only deal with code with hidden dangers.
Static verification
以 flow 为代表的静态校验工具,可以在一定程度上检测出 NPE 隐患。 type res = { data ?: Object } let name = res.data.name; // property `name`. Propery cannot be accessed on possibly undefined value
As described in the above code, users need to first clarify whether their data is allowed to be null. When data is allowed to be null, it is detected through flow, data.name Calls like this will detect errors.
However, how to promote all businesses to have access to static verification, and how to ensure that developers describe all types after access, is also a difficulty.
The above is the content of error isolation in JavaScript. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Understanding how JavaScript engine works internally is important to developers because it helps write more efficient code and understand performance bottlenecks and optimization strategies. 1) The engine's workflow includes three stages: parsing, compiling and execution; 2) During the execution process, the engine will perform dynamic optimization, such as inline cache and hidden classes; 3) Best practices include avoiding global variables, optimizing loops, using const and lets, and avoiding excessive use of closures.

Python is more suitable for beginners, with a smooth learning curve and concise syntax; JavaScript is suitable for front-end development, with a steep learning curve and flexible syntax. 1. Python syntax is intuitive and suitable for data science and back-end development. 2. JavaScript is flexible and widely used in front-end and server-side programming.

Python and JavaScript have their own advantages and disadvantages in terms of community, libraries and resources. 1) The Python community is friendly and suitable for beginners, but the front-end development resources are not as rich as JavaScript. 2) Python is powerful in data science and machine learning libraries, while JavaScript is better in front-end development libraries and frameworks. 3) Both have rich learning resources, but Python is suitable for starting with official documents, while JavaScript is better with MDNWebDocs. The choice should be based on project needs and personal interests.

The shift from C/C to JavaScript requires adapting to dynamic typing, garbage collection and asynchronous programming. 1) C/C is a statically typed language that requires manual memory management, while JavaScript is dynamically typed and garbage collection is automatically processed. 2) C/C needs to be compiled into machine code, while JavaScript is an interpreted language. 3) JavaScript introduces concepts such as closures, prototype chains and Promise, which enhances flexibility and asynchronous programming capabilities.

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

WebStorm Mac version
Useful JavaScript development tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version
Recommended: Win version, supports code prompts!

Zend Studio 13.0.1
Powerful PHP integrated development environment