⊗jsSpPrmFC 171 of 294 menu

Tạo Promise đã hoàn thành trong JavaScript

Đôi khi bạn có thể cần tạo một promise đã được thực hiện. Có hai phương thức cho việc này: phương thức Promise.resolve tạo ra một promise đã hoàn thành thành công, Promise.reject tạo ra một promise bị từ chối. Tham số của các phương thức này nhận vào thứ sẽ trở thành kết quả hoặc lỗi của promise tương ứng.

Khi nào chúng ta có thể cần một promise đã hoàn thành? Hãy xem xét một ví dụ. Giả sử chúng ta có một hàm nào đó nhận tham số là một số, thực hiện một số thao tác không đồng bộ với nó và trả về một promise với kết quả:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

Chúng ta sẽ sử dụng hàm của mình theo cách sau:

func(5).then(function(res) { console.log(res); // sẽ xuất ra 25 });

Bây giờ giả sử chúng ta quyết định rằng thao tác không đồng bộ của mình chỉ sẽ được thực hiện nếu số được truyền vào lớn hơn 0. Trong trường hợp ngược lại, kết quả của hàm phải là số không:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // kết quả bằng không } }

Tuy nhiên, bây giờ hàm trả về hoặc một promise, hoặc một số. Vì điều này, chúng ta không thể áp dụng phương thức then cho kết quả của hàm nữa, vì trong trường hợp hàm trả về một số, chúng ta sẽ gặp lỗi:

func(0).then(function(res) { // lỗi, áp dụng phương thức then cho số không });

Phương thức Promise.resolve sẽ giúp chúng ta sửa vấn đề này:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // trả về một promise, không phải số } }

Bây giờ giả sử chúng ta quyết định rằng đối với số không được truyền vào chúng ta sẽ trả về số không, còn đối với các số nhỏ hơn 0 - một ngoại lệ. Phương thức Promise.reject sẽ giúp chúng ta:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // trả về một promise bị từ chối } }
Tiếng Việt
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbek
Chúng tôi sử dụng cookie để vận hành trang web, phân tích và cá nhân hóa. Việc xử lý dữ liệu được thực hiện tuân theo Chính sách bảo mật.
chấp nhận tất cả tùy chỉnh từ chối