True/False -- Bất đồng bộ/Đồng bộ là như thế nào?

Mình mới tìm hiểu qua về Ajax, trong đó có ví dụ thế này:

https://jsfiddle.net/6wbbryde/1/

Trong đó mình đang thắc mắc về đối số thứ 3 của phương thức Open trong đoạn code trên.

Mình đọc tài liệu thì thấy họ viết : Nếu giá trị để là true tức là xử lý theo kiểu bất đồng bộ nghĩa là chương trình có thể nhảy đi bỏ qua một bước nào đó, còn nếu để giá trị là false tức là xử lý theo kiểu đồng bộ tức là khi nào chương trình này chạy xong mới nhảy qua chương trình khác

Mình cũng mới tìm hiểu nên cũng chỉ biết vậy chứ thực sự chưa được hiểu sâu. Mình muốn hỏi trong ví dụ mình đưa ra ở trên thì tại sao đối số thứ 3 của phương thức Open để là false thì chạy còn true thì không , đồng bộ với bất đồng bộ cụ thể ở ví dụ của mình là ở chỗ nào , và trường hợp thế nào thì mình dùng true ạ ?

Cám ơn các bạn nhiều !

Xử lý đồng bộ:
A: Tao yêu cầu C cho tao cái file A.js
C: Oke, tao gửi rồi đó, mày đợi hàng đến đi
(5 giây sau)
A: Oke tao nhận được rồi
A: In dữ liệu ra

Xử lý bất đồng bộ:
A: Tao yêu cầu C cho tao cái file A.js
C: Oke, tao gửi rồi đó, mày đợi hàng đến đi
A: Thôi tao không đợi đâu, bái bai
A: In dữ liệu ra
A: (5 giây sau) Tao nhận được file A.js rồi mày ạ -> Nhưng tao in dữ liệu rồi nên không cần nữa :smiley:

Quay lại bài của bạn thì lý do như sau:
- Nếu false: Thì sau khi gửi request nó phải đợi thằng bên kia trả về cái file sau đó mới tiếp tục chạy câu lệnh dưới
- Nếu true: Thì sau khi gửi request tức là đã chạy xong lệnh xhttp.send(); -> Lúc này nó sẽ không quan tâm là thằng bên kia trả về dữ liệu chưa mà sẽ chạy tiếp $('.result').text(xhttp.responseText); -> Nó vẫn sẽ in ra nhưng do thằng bên kia chưa trả về cái gì hết nên sẽ in ra trắng bóc

P.s: Bạn có thể dùng setTimeout để đợi request hoàn thành mới in ra https://jsfiddle.net/6wbbryde/11/

2 Likes

Cám ơn bạn đã giải thích cho mình hiểu được sâu hơn vấn đề. Mà mình có một thắc mắc thế này:

Như ví dụ của mình thì dùng kiểu đồng bộ hay bất đồng bộ thì cũng vẫn ra kết quả như nhau nhưng rõ ràng cách dùng kiểu đồng bộ (để là false) nhìn Code ngắn gọn dễ đọc hơn so với bất đồng bộ (để là true).

Thế thì mình không biết dùng bất đồng bộ có lợi gì hơn so với đồng bộ , ít nhất là trong ví dụ mình đưa ra ?

Có ai rành về thằng Ajax này không, xin giải thích giùm tui với ạ

Giúp trình duyệt không bị treo, app không bị đóng băng,… nhiều lợi ích khác.

Cám ơn bạn, cái đó thì chung chung quá, mình muốn câu trả lời sâu sâu hơn chút. Tks bạn

Đồng bộ thì xử lý từ trên xuống dưới, dễ hiểu, dễ debug
Bất đồng bộ thì xử lý không theo thứ tự trên, hiểu đơn giản là thực hiện nhiều công việc 1 lúc -> Nhược điểm thị callback hell, khó hiểu,… -> vì nó không chạy theo thứ tự

Mà ở các bản ES gần đây có thêm await async khiến code bất đồng bộ trông giống đồng bộ -> Rất thích 2 thằng này

Mà bạn đừng quá quan trọng thằng nào lợi hơn thằng nào, sau này bạn sẽ làm việc với bất đồng bộ rất nhiều, chẳng né đi đâu được đâu

1 Like

Bạn hiểu nhầm ý của mình rồi, không phải mình muốn né nó đâu, mình còn đang muốn tìm hiểu nó kia mà.

Tại vì mình nghĩ, mỗi một công nghệ mới được ra đời chắc chắn nó sẽ nhằm mục đích giải quyết những nhược điểm mà những công nghệ đi trước chưa làm được, vì thế nó phải có điều gì đó tiến bộ hơn, tối ưu hơn, nhiều điểm mạnh hơn.

Cho nên câu hỏi của mình là để tìm kiếm điều đó. Có lẽ mình mới học nên không thể mường tượng hết được cái điểm mạnh của thằng Ajax này . Chắc là phải cần nhiều thời gian hơn đê hiểu.

Tks bạn nhiều :))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?