9 câu hỏi lắt léo về Promise
1.
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))
Kết quả output
- Kết quả lỗi log ra 1 lần
- Kết quả lỗi log ra 2 lần
- UnhandledPromiseRejectionWarning
.catch
sẽ làm việc giống như .addEventListener(event, callback)
hay Event Emitter .on(event, callback)
. Có thể add thêm bao nhiêu tùy thích, nó số chạy tất cả các callback đã đăng ký
2var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!')) }) p.catch(error => console.log(error.message)) p.catch(error => console.log(error.message))
- Kết quả lỗi log ra 1 lần
- Kết quả lỗi log ra 2 lần
- UnhandledPromiseRejectionWarning
Khi khởi tạo một Promise, chúng ta phải gọi một trong hai callback resolve()
hoặc reject()
. Nó ko return
giá trị. Không thể dùng Promise.reject()
như ở trên. Đáp án: UnhandledPromiseRejectionWarning
3
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error))
.then(error => console.log(error))
Kết quả
- In ra lỗi và
undefined
- in ra lỗi 2 lần
- UnhandledPromiseRejectionWarning
- undefined
Gợi ý thứ nhất console.log()
luôn trả về undefined
. Thứ 2, khi đặt .catch
trước .then
như thế, nó sẽ không nhận được giá trị từ hàm trước đó, mọi thứ đã dừng lại ở catch
. Đáp án In ra lỗi và undefined
4
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error.message))
.catch(error => console.log(error.message))
- In ra lỗi một lần
- In ra lỗi 2 lần
- UnhandledPromiseRejectionWarning
Giải thích như trên, câu catch
thứ 2 không được gọi đến, điều đặc biệt là bạn có thể đặt .then
ở phía sau catch
nhưng không thể đặt catch
sau catch
. Đáp án: In ra lỗi 1 lần
5
new Promise((resolve, reject) => {
resolve('Success!')
})
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return "actually, that worked"
})
.catch(error => console.log(error.message))
- In lỗi 1 lần
- In lỗi 2 lần
- UnhandledPromiseRejectionWarning
- Ko in gì cả
catch
có thể được sử dụng để bỏ qua hoặc ghi đè lên giá trị lỗi bằng cách cho return một giá trị. Trò này chỉ làm được khi trước đó then
có trả về giá trị. Đáp án: không in gì cả
6
Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
})
- In ra “Success!” và “SUCCESS!”
- In ra “Success!”
- In ra “SUCCESS!”
- Không in ra gì cả
.then
sẽ truyền dữ liệu theo thứ tự đã viết, khi return
giá trị, hàm then
tiếp thiệu sẽ nhận giá trị return
này. Đáp án: In ra “SUCCESS!”
7
Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
return data
})
.then(console.log)
- In ra “SUCCESS!”
- In ra “Success!”
- In ra “SUCCESS!” và “SUCCESS!”
- Không in ra gì cả
Giải thích tương tự như trên. Đáp án: In ra “SUCCESS!” và “SUCCESS!”
8
Promise.resolve('Success!')
.then(data => {
data.toUpperCase()
})
.then(data => {
console.log(data)
})
- In ra “SUCCESS!”
- In ra “Success!”
- In ra “SUCCESS!” và “SUCCESS!”
- In ra “undefined”
Nếu muốn truyền giá trị xuống .then
bên dưới, trước đó phải return
. Đáp án: In ra “undefined”
9
Promise.resolve('Success!')
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return 'actually, that worked'
})
.then(data => {
throw Error('The fails!')
})
.catch(error => console.log(error.message))
- In ra “Oh noes!” và “The fails!”
- In ra “Oh noes!”
- In ra “The fails!”
- In ra “actually, that worked”
- Không in ra gì cả
Tổng hợp những kiến thức ở trên, hy vọng bạn trả lời đúng câu này. Ở then
đầu tiên, chúng ta throw một error, catch
tiếp theo chúng ta return
coi như bỏ qua error này, then
thứ 2, nhận data nhưng chúng ta ko làm gì với nó cả, mà throw một error khác, catch cuối cùng sẽ là giá trị error vừa throw ở trên. Đáp án: In ra “The fails!”.
TopDev via Vuilaptrinh
Xem thêm các vị trí tuyển dev lương cao tại đây
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- i iOS 18 có gì mới? Có nên cập nhật iOS 18 cho iPhone của bạn?
- G Gamma AI là gì? Cách tạo slide chuyên nghiệp chỉ trong vài phút
- P Power BI là gì? Vì sao doanh nghiệp nên sử dụng PBI?
- K KICC HCMC x TOPDEV – Bước đệm nâng tầm sự nghiệp cho nhân tài IT Việt Nam
- T Trello là gì? Cách sử dụng Trello để quản lý công việc
- T TOP 10 SỰ KIỆN CÔNG NGHỆ THƯỜNG NIÊN KHÔNG NÊN BỎ LỠ
- T Tìm hiểu Laptop AI – So sánh Laptop AI với Laptop thường
- M MySQL vs MS SQL Server: Phân biệt hai RDBMS phổ biến nhất
- S SearchGPT là gì? Công cụ tìm kiếm mới có thể đánh bại Google?