This article mainly introduces the use of Promise to solve the code nesting problem caused by multiple asynchronous Ajax requests. Friends in need can refer to
Questions
When the front-end students were making pages, they made a common mistake: writing down multiple Ajax requests in sequence, and subsequent requests are dependent on the return results of the previous requests. As shown in the following code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
The above code has two problems:
*The first is that the execution order cannot be guaranteed, action2 is very likely It was issued before action1 returned, resulting in the parameter someData.attr1 not being transmitted correctly
*Secondly, the code duplication of the two ajax requests was very serious
Thinking
The problem of code duplication is relatively easy to solve, especially in your own project. Various parameters can be determined through specifications and encapsulated an ajax method with fewer parameters. That’s fine
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
This way only the three necessary parameters of url, data and callback need to be filled in, and the others are fixed
Regarding the execution order, you can put the second request in the callback of the first request, in the form:
1 2 3 4 5 6 7 |
|
So far the problem seems to be solved perfectly, but it is conceivable that if there are more than two requests, but 4 or 5, and there are other asynchronous operations (such as Vue objects in our page Initialization), there are dependencies between each other. Just such layers of nested brackets can make people dizzy.
We need to find a way to make the expression of asynchronous calls look like synchronous calls.
I happened to read Teacher Ruan Yifeng’s book about ES6 recently, and the user did not insist on compatibility with IE browser, so I chose the Promise solution
Solution
Introducing Promise
In fact, modern browsers already have built-in support for Promise, and there is no need for third-party libraries No, only IE doesn't work, so I gave up
Modify the ajax wrapper function, call resolve() when successful, call reject() when failed, and return the Promise object
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
Modify the calling end
1 2 3 4 5 6 7 8 9 10 11 12 |
|
The above is what I compiled for everyone. I hope it will be helpful to everyone in the future.
Related articles:
HTTP messages and basic knowledge of ajax
The principle of Ajax cross-domain request (graphic tutorial)
Ajax asynchronous request technology example explanation
The above is the detailed content of Use Promise to solve code nesting problems caused by multiple asynchronous Ajax requests. For more information, please follow other related articles on the PHP Chinese website!