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ý
✅ Đáp án
- Kết quả lỗi log ra 2 lần
2
var 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 một 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
- Ko 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 theo 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!"
Initializing...