[英]Nested ES6 promises - outer func error not caught
我不熟悉ES6和一系列承諾。 我的情況是,原始調用站點調用一個函數(1),然后調用另一個函數(2)。 嘗試同時具有功能2和功能1會基於成功或錯誤返回承諾。
這是一些人為的示例代碼:
function level2(data) {
return new Promise((resolve, reject) => {
reject('fail')
})
}
function level1(info) {
level2('abc').then((response) => {
return new Promise((resolve, reject) => {
resolve('success')
})
})
}
level1('thing').then((response) => {
console.log('response2 ' + response)
}).catch(e => {
console.log('error2 ' + e)
})
我能夠成功使用一級承諾。 但是,當涉及到對諾言的鏈接或嵌套時,我沒有正確地使用它,因此消耗諾言的最外層無法捕獲錯誤。
設置promise的正確方法是什么,以便兩個功能(級別1和2)都可以將成功或失敗返回給調用方?
在示例函數(level1)中,函數(level2)的錯誤是否會冒泡?
您需要獲得level1
才能返回承諾。
{ // level2 reject: function level2(data) { return new Promise((resolve, reject) => { reject('fail inside level2') }) } function level1(info) { return level2('abc').then((response) => { return new Promise((resolve, reject) => { resolve('success') }) }) } level1('thing').then((response) => { console.log('response2 ' + response) }).catch(e => { console.log('error2 ' + e) }); } { // level1 reject: function level2(data) { return new Promise((resolve, reject) => { resolve('ok'); }) } function level1(info) { return level2('abc').then((response) => { return new Promise((resolve, reject) => { reject('fail inside level1') }) }) } level1('thing').then((response) => { console.log('response2 ' + response) }).catch(e => { console.log('error2 ' + e) }); }
首先,您不需要這些:
new Promise((resolve, reject) => reject('fail'))
有一些快捷方式:
Promise.resolve("success")
Promise.reject("fail");
設置promise的正確方法是什么,以便兩個功能(級別1和2)都可以將成功或失敗返回給調用方?
使用Promise.all
或Promise.race
來統一它們,或者將其中一個允諾返回到另一個允諾中,然后使它們變平(就像您所做的那樣)。
在示例函數(level1)中,函數(level2)的錯誤是否會冒泡?
是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.