Ai đã từng sử dụng Javascript chắc đều biết cách xử lý bất đồng bộ là một đặc trưng của Javascript. Ví dụ: bạn viết hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
0 để gửi yêu cầu đến một đường dẫn rồi ghi nhật ký kết quả trả về ra bảng điều khiểnfunction request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
Trong đoạn mã trên, hàm gắn liền với sự kiện
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
1 là đoạn mã được xử lý bất đồng bộ. Dù nó được viết trước các lệnh như function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
2 và function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
3 nhưng thực tế lại được xử lý sau khi yêu cầu đã hoàn thành và có kết quả trả vềHàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
0 như trên được viết không tốt. Lý do là chức năng đang thực hiện hai chức năng khác nhau. gửi yêu cầu lấy kết quả và xử lý kết quả trả về. Trong khi chức năng gửi yêu cầu lấy kết quả có thể sử dụng chung cho bất kỳ đường dẫn nào thì chức năng xử lý kết quả nên được tách riêng ra để tùy biến cho các trường hợp khác nhau. Do đó, chúng ta có thể sửa lại hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
0 thành function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
6 với tham số đầu vào function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
7 là một hàm xử lý bất kỳfunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
Hàm processResult được truyền như một tham số và được thực hiện trong một hàm khác dưới một điều kiện nhất định, theo định nghĩa có tên gọi là
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
8. Sau khi tách ra, chúng ta có thể chuyển toàn bộ phần mã liên quan đến việc gửi yêu cầu vào thư viện, để sau khi sử dụng, chúng ta chỉ cần định nghĩa hàm xử lý kết quả là đủfunction logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
Việc sử dụng
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
8 để xử lý bất đồng bộ đã tồn tại trong suốt lịch sử của Javascript. Khuyết điểm của nó là bạn đã định nghĩa một hàm số nhưng lời gọi thực hiện nó được lồng ngược trong và phụ thuộc vào một hàm khác. Điều đó dẫn đến những sự cố phản ánh thời gian, ví dụ như khi bạn muốn lấy kết quả từ đường dẫn A gửi cho đường dẫn B, rồi lấy kết quả từ đường dẫn B gửi đến đường dẫn C,…function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
3Những dòng lệnh lồng nhau rối mắt như trên được gọi là
function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30. Nó sẽ còn trở nên phức tạp hơn nữa trong trường hợp bạn cần bổ sung vào các lệnh xử lý lỗi hoặc đối ứng với các trường hợp ngoại lệ. Vậy cách giải quyết function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30 như thế nào? . function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
33ES6. phiên bản thứ 6 của ngôn ngữ ECMAScript đặc tả do tổ chức Ecma International tạo ra. Công cụ Javascript – được sử dụng để dịch mã Javascript, có thể là một trình thông dịch hoặc một trình biên dịch động – của các trình duyệt thông thường được tạo theo bộ mô tả này
2. Lời hứa
Promise là một đối tượng được sử dụng trong các xử lý bất đồng bộ, đại diện cho một thao tác chưa hoàn thành, đang chờ đợi kết quả trong tương lai. Promise a object can have an in ba status
34. trạng thái ban đầu, kết quả chưa xác định của thao tác là thành công hay thất bạifunction request[URL] { var xhttp = new XMLHttpRequest[]; //Bất đồng bộ xhttp.onreadystatechange = function[] { if [xhttp.readyState == 4 && xhttp.status == 200] { console.log[xhttp.responseText]; } }; xhttp.open["GET", URL, true]; xhttp.send[]; }
35. thao tác có kết quả thành côngfunction request[URL] { var xhttp = new XMLHttpRequest[]; //Bất đồng bộ xhttp.onreadystatechange = function[] { if [xhttp.readyState == 4 && xhttp.status == 200] { console.log[xhttp.responseText]; } }; xhttp.open["GET", URL, true]; xhttp.send[]; }
36. thao tác có kết quả thất bạifunction request[URL] { var xhttp = new XMLHttpRequest[]; //Bất đồng bộ xhttp.onreadystatechange = function[] { if [xhttp.readyState == 4 && xhttp.status == 200] { console.log[xhttp.responseText]; } }; xhttp.open["GET", URL, true]; xhttp.send[]; }
Chúng ta không sử dụng hàm gọi lại trực tiếp trong tham số của hàm
function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
37 nữa, sửa lời gọi hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
6 về như ban đầu. function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
0. Tuy nhiên, khác với lệnh cấm đầu, bên trong hàm ta không xử lý trực tiếp kết quả mà trả về một lời hứafunction logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
4Hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
0 lúc này chỉ làm một công việc được định nghĩa là hàm gọi lại để khởi tạo đối tượng Hứa trả lại. Chức năng gọi lại này phải có ít nhất hai tham số. ________ 241 và ________ 242. Cả hai đều là chức năng gọi lại được định nghĩa là đi kèm với đối tượng Promise. function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
43 là hàm gọi lại để chuyển trạng thái của Lời hứa từ function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
44 sang function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45 [đánh dấu thao tác thành công], function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
42 là hàm gọi lại để chuyển trạng thái của function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
33 từ function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
44 sang function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
49 [đánh dấu thao tác thất bại]Ở đoạn mã kể trên, Promise object at the start return will have the status
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
44. Thao tác gửi yêu cầu đã được thực hiện bên trong đối tượng Lời hứa. Khi có kết quả trả về thành công, hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
41 được gọi để chuyển trạng thái của đối tượng Lời hứa về function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45Chúng ta có thể truyền các hàm xử lý kết quả vào đối tượng Promise tạo ra ở trên thông qua phương thức
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
83 của đối tượng chính Promise đó. Hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
83 có thể nhận hai tham số, tham số đầu tiên là hàm gọi lại để xử lý kết quả khi Promise có trạng thái function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45, tham số thứ hai là hàm gọi lại để xử lý kết quả khi Promise có trạng thái function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
49Ví dụ chúng ta truyền hàm log kết quả ra bảng điều khiển để làm tham số cho hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
83 của đối tượng Promisefunction logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
8Kết quả trả về của hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
83 là một Promise mới phụ thuộc vào kết quả của Promise trước đó và các hàm xử lý kết quả được truyền vào. Trong hàm logResult ở trên, kết quả trả về là 1 nên nếu Promise tạo ra từ hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
89 có trạng thái là function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45, thì Promise mới tạo ra từ hàm function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
71 cũng có trạng thái là function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45 và phản hồi là 1function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
7Vì vậy, sự khác biệt giữa việc sử dụng Promise với việc sử dụng chức năng gọi lại trực tiếp như ban đầu là gì? . Tương tự như vậy khi bạn muốn lấy kết quả từ đường dẫn A để gửi cho đường dẫn B, nhờ hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
83 cũng trả về một Promise, thay vì hàm gọi lại lồng nhau như function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30, chúng ta sẽ có một chuỗi đối tượng Promise nối tiếp nhaufunction logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
2Rõ ràng với Promise, chúng ta đã có những đoạn mã xử lý bất đồng bộ có vẻ dễ nhìn hơn nhiều so với trước đó. Nhưng câu hỏi quen thuộc. nó còn có thể tốt hơn được nữa không?
3. Máy phát điện
Trình tạo cũng là một đối tượng mới được xuất đề trong ES6. Với một hàm thông thường trong Javascript, khi bạn đã định nghĩa xong nội dung cũng như tham số của hàm, bạn sẽ không thể lấy bất cứ điều gì khi hàm đó được thực thi. Trình tạo hàm với khai báo có dấu
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
75 phía sau thì khác, bạn có thể thực thi hàm đó từng bước, lấy ra các giá trị trung gian và thay đổi giá trị của các biến trong hàm. Một ví dụfunction logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
4Ban đầu, ta sẽ tạo ra một Trình tạo đối tượng từ Trình tạo hàm kể trên
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
5Lúc này hàm ví dụ vẫn chưa được thực thi. Chúng ta gọi đến phương thức ________ 476 của đối tượng
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
77 lần đầu tiên, hàm ví dụ sẽ thực thi đến câu lệnh function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
78 thứ nhất. Biến giá trị ________ 479 trong lệnh ________ 520 sẽ được gán cho thuộc tính function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
21 của các đối tượng được trả về từ phương thức function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
0Chúng ta gọi đến phương thức ________ 476 lần thứ hai. Lúc này giá trị tham số đầu tiên được truyền vào phương thức
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 sẽ thay thế toàn bộ cụm từ function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
25 có trong trình tạo hàm. Hàm mẫu tiếp tục thực thi đến câu lệnh _______ 478 thứ hai. Biến giá trị function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
27 sẽ được gán cho thuộc tính function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
21 của đối tượng được trả về từ phương thức function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
1Chúng ta gọi đến phương thức ________ 476 lần thứ ba. Lần này giá trị tham số đầu tiên truyền vào phương thức
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 sẽ thay thế toàn bộ cụm từ function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
42 có trong trình tạo hàm. Vì không có câu lệnh function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
78 phía trước nên hàm ví dụ sẽ thực thi đến hết. Thuộc tính ________ 521 của các đối tượng được trả về từ phương thức function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 chính là giá trị trả về của hàmfunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
2Vì ví dụ phương thức đã kết thúc, nên chúng ta có gọi đến phương thức
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 thêm lần nữa cũng không có ý nghĩa gìfunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
3Chúng ta có thể coi chức năng bắt đầu, kết thúc hàm cộng với các câu lệnh mang lại là các cột, còn câu lệnh
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 của Trình tạo đối tượng giống như công việc di chuyển lưu trữ các cột đó. Với các cột function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
78, chúng ta vừa có thể lấy giá trị vừa có thể gán lại giá trị cho các cột đó. Số khoảng cách giữa các cột sẽ bằng số cột chống đi một, nên số câu lệnh function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
76 cần thiết để đi từ đầu hàm đến cuối hàm sẽ nhiều hơn một so với số câu lệnh function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
78 trong hàmTrình tạo rõ ràng là rất lý thú không đúng. Nhưng nó thì có liên quan gì đến Promise và những phần chúng ta đề cập ở trên nhỉ?
4. Lời hứa & Máy phát điện
Generator giúp chúng ta có thể lấy ra và truyền lại các giá trị vào trong hàm. Ý tưởng ở đây là chúng ta sẽ sử dụng trình tạo để lấy đối tượng Promise ra khỏi hàm chính. Đợi đến khi đối tượng Promise chuyển trạng thái từ
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
44 sang function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
45 hoặc function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
49, chúng ta sẽ đưa ra phản hồi lấy được từ Promise đó trở lại chức năng chính. Như vậy toàn bộ phần xử lý bất đồng bộ sẽ được tách ra khỏi hàm chínhChúng ta sẽ thử viết một hàm **run_Simple **cơ bản
function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
4In sao lại sử dụng Promise. giải quyết [hứa]? . Lời hứa. giải quyết [] cho phép chúng ta có thể tạo một lời hứa từ một giá trị xác định hoặc từ một lời hứa khác. Nếu tham số truyền vào Promise. giải quyết [] là một giá trị xác định, thì lời hứa tạo ra sẽ có trạng thái là ______245 và phản hồi thu được chính là giá trị đó. Nếu tham số truyền vào Promise. giải quyết[] là một lời hứa khác, thì lời hứa tạo ra sẽ có trạng thái và phản hồi do đó giống với lời hứa được truyền tham số
Chúng ta có thể đưa run_Simple function vào thư viện. Sau đó, mỗi lần gửi yêu cầu đến đường dẫn nào, chúng ta chỉ cần viết một hàm như sau
function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
5Vì vậy, toàn bộ các đoạn mã liên quan đến xử lý bất đồng bộ đã được che giấu. Bạn có thể viết mã cho một lý do bất đồng bộ [gửi yêu cầu đến một đường dẫn, lấy kết quả và ghi nhật ký ra bảng điều khiển] hoàn toàn giống y như các đoạn mã đồng bộ xử lý thông thường khác
Tuy nhiên, hàm run Simple hiện tại vẫn còn quá yếu. Nó không cho phép truyền tham số vào hàm main. Nó cũng chỉ được phép trong hàm main có chứa một lời hứa duy nhất. Chúng ta có thể cài đặt một hàm ________ 555, phiên bản của cái tiến trình tốt hơn Chắc chắn của hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
56 như saufunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
6With run function as on, đoạn mã mô tả
function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30 lồng ghép lúc đầu sẽ được viết lại như saufunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
7Khác hoàn toàn đúng không?
Có thể viết các dòng mã đồng bộ cho các bộ xử lý bất đồng kết quả là một bước tiến kỳ diệu, nhưng hàm
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
55 kể trên có vẻ hơi phức tạp. Dù Javascript Engine của các trình duyệt hiện đã hỗ trợ Promise với Generator, song để kết hợp hai đối tượng với nhau cũng hơi rối rắm. Tin vui là bạn không cần phát minh lại cái bánh xe. Rút cục bộ, mã nguồn mở để làm gì cơ chứ?5. Thư viện đồng & đồng yêu cầu
Javascript does not less than library. Một số trong số đó là đồng [Tại sao tôi lại giới thiệu thư viện này chứ không phải thư viện khác? – vì nhiệm vụ của tôi bắt sử dụng]. Trong đó hàm ________ 559 Đóng vai trò chơi như hàm ________ 555 tôi viết ở trên [ Khả năng khả năng
function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
59 của họ được viết tốt hơn]. Nếu bạn muốn gửi yêu cầu đến đường dẫn thì có thể sử dụng thêm đồng yêu cầu sự thật hàm function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
37 trong đó cũng có vai trò tạo ra lời hứa như hàm function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
37 tôi viết ở trên [ Chắc chắn rằng function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
37 của họ được viết tốt hơn]Sau khi bạn cài đặt hai thư viện vào dự án của mình, bạn có thể mã đoạn mã
function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30 mô tả ở đầu như saufunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
8Sử dụng thư viện của người khác rõ ràng là một ý tưởng không tồi. Nhưng nếu vấn đề bạn cần sử dụng để truy cập thư viện lại là một vấn đề phổ biến đến mức xung đột đến Javascript là gặp phải thì sao? . Thư viện A với thư viện B có cú pháp hoàn toàn khác nhau. Kết quả là để xử lý một chương trình logic giống nhau bằng một ngôn ngữ lập trình giống nhau, bạn vẫn phải học lại. Đương nhiên thời gian học của bạn sẽ rút ngắn hơn thời gian học của những người chưa biết gì, nhưng mất thời gian vẫn là mất thời gian. Chưa kể bạn có thể đối đầu với những cuộc tranh cãi bất tận mang tính tôn giáo, như thư viện A với thư viện B cái nào tốt hơn?
Để đối phó với những phức tạp như thế, chỉ có một tổ chức mà chúng ta có thể tin cậy, đó là Ecma International
6. ES7. Không đồng bộ & đang chờ?
Trình tạo kết hợp với lời hứa đã thay đổi hoàn toàn việc thiết lập trình xử lý những xử lý bất đồng bộ trong javascript. Đã nhận được ý nghĩa rõ ràng cũng như sự biến phổ trong tương lai của họ, nhiều người đã đề xuất đến Ecma International để đưa các cú pháp tiêu chuẩn cho sự kết hợp này vào trong bộ mô tả EMCAScript. Ý kiến được đa phần đồng tình là những hàm tạo có xử lý bất đồng bộ ở bên trong sẽ có cú pháp là
function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
06. Và để thể hiện ý nghĩa của các dòng lệnh tốt hơn, trong function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
06, cú pháp function logResult[response] {
console.log[response];
return 1;
}
request["www.google.com", logResult];
78 sẽ được thay thế bằng function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
09Đoạn mã liên quan
function request[URL] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
console.log[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
30 khi đó sẽ thành thế nàyfunction request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
9Và sau khi Javascript Engine của trình duyệt cài đặt các tính năng này theo EMCAScript, bạn có thể tạo ra các đoạn mã xử lý bất đồng bộ xử lý một cách đẹp đẽ như trên, không cần đến thư viện bên ngoài, thậm chí chí chí cũng
Bản đã được công bố chính thức vào tháng 6 năm nay. Rất tiếc là
function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
06 và function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
09 đã không được đưa vào đặc tả lần này. Trong khi hi vọng chúng sẽ xuất hiện trong ES8, các bạn có thể tạm thời sử dụng các thư viện và framework đã hỗ trợ function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
06 và function request[URL, processResult] {
var xhttp = new XMLHttpRequest[];
//Bất đồng bộ
xhttp.onreadystatechange = function[] {
if [xhttp.readyState == 4 && xhttp.status == 200] {
//Xử lý kết quả trả về
processResult[xhttp.responseText];
}
};
xhttp.open["GET", URL, true];
xhttp.send[];
}
09 như babel chả hạnTham khảo
Bài viết thực ra là sự tóm tắt, thuật ngữ và thêm thắt từ cuốn sách You Don't Know JS. Không đồng bộ & Hiệu suất. Bạn nào muốn tìm hiểu chi tiết hơn về Promise và Generator có thể tham khảo thêm trong sách
Bạn có thể đọc miễn phí cả bộ You Don't Know JS tại đây. https. //github. com/getify/Bạn-Không-Biết-JS
Chi tiết việc cài đặt các đối tượng Hứa với các bạn có thể tham khảo một số thư viện Javascript mã nguồn mở. Ví dụ như đây. Lưu ý là không say mê JavaScript Engine của các trình duyệt như V8 JavaScript Engine[được viết bằng C++] cũng như cài đặt các đối tượng Promise giống như các thư viện trên