Quay lại

Promise Javascript là gì? Sử dụng Promise trong Javascript

Tác giả: Hoàng Hiền - 12/04/2021

Promise Javascript được sử dụng để giải quyết một số vấn đề về việc bất đồng bộ quá trình. Kết quả của tác vụ đồng bộ hay bất đồng bộ dữ liệu sẽ được trả về hoặc thực hiện một Callback Function. Khi thực hiện Callback Function sẽ thường xảy ra lỗi Callback Hell, lỗi này xảy ra do quá trình callback quá nhiều gây ra sự chồng chéo dẫn đến việc không đủ bộ nhớ hoạt động hoặc không thể kiểm soát hết các quá trình. Để giải quyết vấn đề này thì Promise đã ra đời.

1. Định nghĩa “Promise Javascript là gì?”

Trước tiên, bạn đọc cần hiểu về Javascript là gì. Javascript là ngôn ngữ đơn luồng, cụ thể là tại một thời điểm nhất định, một mã xử lý nhiệm vụ sẽ chạy một lần duy nhất trong trường hợp đó, nếu muốn chạy lần thứ hai nó phải đợi quá trình lần thứ nhất kết thúc.

Promise Javascript là gì?

Điều này tuân thủ theo nguyên tắc hoạt động của quá trình đồng bộ. Do vậy trong nhiều trường hợp, nó gây ra không ít phiền toái và gây mất thời gian. Hãy thử tưởng tượng, khi bạn đến bệnh viện khám bệnh, bạn sẽ thấy một hàng dài người chờ đợi để đến lượt. Vậy hành động đó ảnh hưởng đến thời gian cũng như các mặt khác của bạn. Qúa trình này trong lập trình được gọi là quá trình đồng bộ hóa Synchronous.

Vậy có phải Promise sinh ra sẽ giải quyết được vấn đề này trong Javascript hay không? Câu trả lời chắc chắn là có. Promise được sử dụng để giải quyết các vấn đề đồng bộ. Theo tìm hiểu và tổng hợp, timviec365.vn sẽ đưa đến khái niệm về Promise Javascript của nhà phát hành. Cụ thể như sau:

“Promise là đối tượng sử dụng trong việc tính toán bất đồng bộ. Promise đại diện cho một tác vụ hoặc một quá trình chưa hoàn thành ngay được. Trong tương lai, Promise sẽ trả lại giá trị kết quả đã được giải quyết hay là không.”

Promise được sử dụng phổ biến

Hành động Callback là hành động gọi lại, chẳng hạn như để trả lời cho câu hỏi “Thành công hay thất bại” khi chạy một lệnh, thì quá trình trả lại kết quả dữ liệu được gọi là Callback Function. Dĩ nhiên là chức năng này có thể xảy ra lỗi và lỗi hay gặp nhất là Callback Hell. Một ví dụ khác dễ hiểu hơn cho bạn đọc, khi bạn thực hiện tìm kiếm hình ảnh trên trình duyệt, nếu hình ảnh load được là kết quả trả về thành công dữ liệu, còn nếu hình ảnh không load được thì một hình ảnh giải thích khác sẽ xuất hiện như không có kết nối, kết nối lỗi,... và điều đó có nghĩa là kết quả trả về là không thành công. Hành động đó chính là Callback Function.

Để giải quyết vấn đề này, Promise được tạo ra với ba trạng thái xuất hiện khi nó được khởi động: Pending. Fulfilled, Rejected.

Trong đó, Pending là hành động vẫn đang được xử lý và chưa xử lý xong, Fulfilled có nghĩa là hành động đã thực hiện xong và thành công còn Rejected thì ngược lại, hành động đã thực hiện xong và không thành công. Rejected và Fulfilled còn được gọi chung là Settled có nghĩa là đã xử lý xong.

Tìm hiểu thêm: JSX là gì? Cú pháp mở rộng trong Javascript có gì hấp dẫn?

2.  Lập trình bất đồng bộ có liên quan gì đến Promise

Lập trình bất đồng bộ có liên quan gì đến Promise

Lập trình đồng bộ thường hay gặp nhất trong quá trình viết source code. Đó là khi chúng ta viết xong một hệ thống câu lệnh, chúng ta check nó và trong quá trình đó chúng ta phải đợi. Như vậy quá trình đồng bộ xảy ra theo trình tự và chúng ta sẽ không thể làm gì khác ngoài việc chờ đợi hệ thống check.

Còn quá trình bất đồng bộ có nghĩa là bạn vẫn tạo một hệ thống câu lệnh và check nó. Nhưng trong quá trình hệ thống check, bạn có thể làm việc khác như thực hiện viết một câu lệnh khác,... Khi hệ thống check chạy xong, bạn chỉ cần ra Callback Function lấy kết quả. Từ đây bạn có thể thấy lập trình bất đồng bộ có những điểm hay và độc đáo hơn lập trình đồng bộ vì bạn có thể giảm bớt thời gian chờ đợi. Đồng hành cùng lập trình bất đồng bộ này chính là công cụ Promise mà timviec365.vn nhắc tới hôm nay.

Xem thêm: Ngành Toán tin ra làm gì và câu trả lời chuẩn nhất?

3. Tại sao phải dùng Promise trong Javascript? Và cách sử dụng của Promise

Bạn có thắc mắc rằng tại sao có Callback Function rồi nhưng người ta vẫn dùng Promise không? Câu trả lời đã được đề cập bên trên, ngay trong chính bài viết này, Promise sẽ cải thiện và giải quyết vấn đề mà Callback Function gây ra có tên gọi Callback Hell. Vậy Promise trong Javascript chỉ xử lý Callback Hell hay còn có những ưu điểm khác?

 Tại sao phải dùng Promise trong Javascript

- Cho phép hỗ trợ “chaning”: Channing ở đây có nghĩa là Promise cho phép bạn gọi nhiều hàm bất đồng bộ một cách liên tiếp, thông qua giá trị trả về từ hàm .(then).

- Khả năng bắt lỗi dễ hơn Callback: hàm .(catch) sẽ được dùng trong trường hợp này và chỉ xảy ra khi có hàm .(reject). Phương thức hay câu lệnh, chức năng của hàm .(catch) tương đối giống với hàm .(then) cho phép bắt lỗi liên tục và song song, chỉ khác ở điều kiện .(reject).

- Giải quyết một số vấn đề của Callback như cho phép bắt được nhiều lỗi nhất có thể, từ lỗi throw Error tới lỗi cú pháp khi lập trình. Mã nguồn sẽ không bao giờ bị lo lọt lỗi nếu sử dụng Promise.

- Sử dụng vòng lặp để thu được nhiều Promise cùng một lúc. Sử dụng hàm nào để thực hiện điều này? Promise.all sẽ giúp bạn thực hiện điều này theo cú pháp Promise.all ([promise 1, promise2,..]).

Qua đây, các bạn đọc có thể xác định được hai phương thức chủ yếu mà Promise hoạt động đó là .(then) và .(catch).

Tham khảo: Mô tả công việc System Engineer - Kỹ sư hệ thống làm gì?

4. Cú pháp đơn giản để tạo Promise

Cú pháp đơn giản để tạo Promise

Cú pháp để tạo ra Promise như sau:

 new Promise ( /*executor*/function (resolve, reject) {...});

Trong đó executor function được chứa trong một constructor, bao gồm hai tham số la resolve và reject. Tác dụng của hai chức năng này cũng thể hiện kết quả thành công hay thất bại.

Xem thêm: Django là gì? Kiến thức về Django cho chuyên gia phát triển web

5. Những sai lầm thường gặp khi thực hiện Promise

Ở đây, chúng tôi tổng hợp được ba sai lầm hay gặp nhất khi các coder, developer thực hiện Promise.

Sai lầm đầu tiên phải kể đến là lỗi kết nối hay còn gọi là kết nối không đúng cách. Sai lầm này xảy ra trong quá trình chúng ta thực hiện một Promise mới mà quên không trả lại kết quả. Sai lầm này dẫn đến hai hậu quả có thể có là chuỗi hỏng hoặc có hai chuỗi độc lập đang chạy cùng một lúc. Xét về hàm thì điều đó có nghĩa là lệnh doFourhting() sẽ chạy song song cùng lúc với một trong hai lệnh doSomethingElse() hoặc doThirdthing(). Đây là vấn đề không ai mong muốn vì các chuỗi khác nhau sẽ xử lý lỗi khác nhau ở cùng hoặc khác thời điểm. Xét cho cả tổng thể, chuỗi bị lỗi và không thể xử lý.

Những sai lầm thường gặp khi thực hiện Promise

Sai lầm thứ hai được nhắc đến nhiều đó là hiện tượng hàm lồng nhau. Vấn đề hàm lồng nhau xảy ra khi không cần thiết là tiền tố dẫn đến sai lầm đầu tiên. Phạm vi của các quá trình xử lý lỗi xảy ra bên trong có tạo ra giới hạn khi chúng lồng nhau. Nếu các lập trình viên không để ý sẽ dẫn tới việc nhiều lỗi không được xử lý. Promise Constructor Anti-pattern là sự kết hợp giữa lồng với việc sử dụng Promise Constructor dự phòng và đồng thời cũng là một biến thể của vấn đề này.

Sai lầm cuối cùng mà chúng tôi tổng hợp được là quên kết thúc chuỗi bằng .(catch). Những chuỗi Promise không kết thúc hay chấm dứt bằng .(catch) sẽ bị lỗi (uncaught promise rejection) khi chạy Reject. Điều này xảy ra hầu hết trong các trình duyệt.

Đến đây, chúng tôi đã đưa cho bạn thông tin về khái niệm, cách sử dụng, cú pháp và một số lỗi hay gặp khi sử dụng Promise trong Javascript. Giải pháp này rất quan trọng để trong quá trình bất đồng bộ. Hy vọng bạn đọc sẽ có thêm một số thông tin về Promise sau khi đọc bài viết này.

Khoa học dữ liệu là gì? Kỷ nguyên “dụng võ” cho khoa học dữ liệu

Thời đại ngày nay, khoa học dữ phát triển trở thành con đường sự nghiệp đầy hứa hẹn. Hãy cùng Timviec365.vn tìm hiểu khoa học dữ liệu là gì? Cùng sức nóng của nghành nghề này trong tương lai qua bài viết dưới đây nhé!

Khoa học dữ liệu là gì

Từ khóa liên quan

Chuyên mục

Bí quyết viết CV- Tâm sự Nghề nghiệp- Cẩm Nang Tìm Việc- Kỹ Năng Tuyển Dụng- Cẩm nang khởi nghiệp- Kinh nghiệm ứng tuyển việc làm- Kỹ năng ứng xử văn phòng- Quyền lợi người lao động- Bí quyết đào tạo nhân lực- Bí quyết lãnh đạo- Bí quyết làm việc hiệu quả- Bí quyết viết đơn xin nghỉ phép- Bí quyết viết thư xin thôi việc- Cách viết đơn xin việc- Bí quyết thành công trong công việc- Bí quyết tăng lương- Bí quyết tìm việc dành cho sinh viên- Kỹ năng đàm phán lương- Kỹ năng phỏng vấn- Kỹ năng quản trị doanh nghiệp- Kinh nghiệm tìm việc làm tại Hà Nội- Kinh nghiệm tìm việc làm tại Đà Nẵng- Mẹo viết hồ sơ xin việc- Mẹo viết thư xin việc- Chia sẻ kinh nghiệm ngành Kinh doanh - Bán hàng- Định hướng nghề nghiệp- Top việc làm hấp dẫn- Tư vấn nghề nghiệp lao động phổ thông- Tư vấn việc làm Hành chính văn phòng- Tư vấn việc làm ngành Báo chí- Tư vấn tìm việc làm thêm- Tư vấn việc làm ngành Bất động sản- Tư vấn việc làm ngành Công nghệ thông tin- Tư vấn việc làm ngành Du lịch- Tư vấn việc làm ngành Kế toán- Tư vấn việc làm ngành Kỹ thuật- Tư vấn việc làm ngành Sư phạm- Tư vấn việc làm ngành Luật- Tư vấn việc làm thẩm định- Tư vấn việc làm vị trí Content- Tư vấn việc làm ngành Nhà hàng - Khách sạn- Tư vấn việc làm quản lý- Kỹ năng văn phòng- Nghề truyền thống- Các vấn đề về lương- Tư vấn tìm việc làm thời vụ- Cách viết Sơ yếu lý lịch- Cách gửi hồ sơ xin việc- Biểu mẫu phục vụ công việc- Tin tức tổng hợp- Ý tưởng kinh doanh- Chia sẻ kinh nghiệm ngành Marketing- Kinh nghiệm tìm việc làm tại Bình Dương- Kinh nghiệm tìm việc làm tại Hồ Chí Minh- Mẹo viết Thư cảm ơn- Góc Công Sở- Câu chuyện nghề nghiệp- Hoạt động đoàn thể- Tư vấn việc làm Biên - Phiên dịch- Tư vấn việc làm Ngành Nhân Sự- Tư vấn việc làm Ngành Xuất Nhập Khẩu - Logistics- Tư vấn việc làm Ngành Tài Chính - Ngân Hàng- Tư vấn việc làm Ngành Xây Dựng- Tư vấn việc làm Ngành Thiết kế - Mỹ thuật- Tư vấn việc làm Ngành Vận tải - Lái xe- Quản trị nhân lực - Quản trị sản xuất- Cẩm nang kinh doanh- Tư vấn việc làm Ngành Thiết kế - Nội thất- Mô tả công việc ngành Kinh doanh- Mô tả công việc ngành Bán hàng- Mô tả công việc Tư vấn - Chăm sóc khách hàng- Mô tả công việc ngành Tài chính - Ngân hàng- Mô tả công việc ngành Kế toán - Kiểm toán- Mô tả công việc ngành Marketing - PR- Mô tả công việc ngành Nhân sự- Mô tả công việc ngành IT - Công nghệ thông tin- Mô tả công việc ngành Sản xuất- Mô tả công việc ngành Giao nhận - Vận tải- Mô tả công việc Kho vận - Vật tư- Mô tả công việc ngành Xuất nhập khẩu – Logistics- Mô tả công việc ngành Du lịch - Nhà hàng - Khách sạn- Mô tả công việc ngành Hàng không- Mô tả công việc ngành Xây dựng- Mô tả công việc ngành Y tế - Dược- Mô tả công việc Lao động phổ thông- Mô tả công việc ngành Kỹ thuật- Mô tả công việc Nhà nghiên cứu- Mô tả công việc ngành Cơ khí - Chế tạo- Mô tả công việc bộ phận Quản lý hành chính- Mô tả công việc Biên - Phiên dịch- Mô tả công việc ngành Thiết kế- Mô tả công việc ngành Báo chí - Truyền hình- Mô tả công việc ngành Nghệ thuật - Điện ảnh- Mô tả công việc ngành Spa – Làm đẹp – Thể lực- Mô tả công việc ngành Giáo dục - Đào tạo- Mô tả công việc Thực tập sinh - Intern- Mô tả công việc ngành Freelancer- Mô tả công việc Công chức - Viên chức- Mô tả công việc ngành Luật - Pháp lý- Tư vấn việc làm Chăm Sóc Khách Hàng - Tư vấn việc làm Vật Tư - Kho Vận- Hồ sơ doanh nhân- Việc làm theo phường- Danh sách các hoàng đế nổi tiếng- Tài liệu gia sư- Vĩ Nhân Thời Xưa- Chấm Công- Danh mục văn thư lưu trữ- Tài Sản Doanh Nghiệp- KPI Năng Lực- Nội Bộ Công Ty - Văn Hóa Doanh Nghiệp-