我是ES6&一系列的承诺。我的情况是原始呼叫站点调用一个函数(1),然后调用另一个函数(2)。试图同时具有功能2& function 1根据成功或错误返回一个promise。
以下是一些示例,人为的代码:
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)
})
我能够成功使用一级承诺。但是当谈到链接或嵌套承诺时,我没有正确使用它,所以消耗承诺的最外层没有捕获错误。
设置promises的正确方法是什么,这样两个函数(1级和2级)都可以向调用者返回成功或失败?
在示例函数(level1)中,函数(level2)的错误是否会向外冒泡?
答案 0 :(得分:3)
您需要让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)
});
}
答案 1 :(得分:1)
起初你不需要这些:
Gender_Female
有快捷方式:
new Promise((resolve, reject) => reject('fail'))
设置promises的正确方法是什么,这样两个函数(1级和2级)都可以向调用者返回成功或失败?
使用 Promise.resolve("success")
Promise.reject("fail");
或Promise.all
来统一它们或将其中一个承诺返回到另一个承诺的链中,这样它们就会变得扁平(就像你一样)。
在示例函数(level1)中,函数(level2)的错误是否会向外冒泡?
是