如何解决但是只有在被拒绝时才返回承诺?
如果我有 2 个承诺,并且我希望只有在 promise1 被拒绝时才在承诺 2 中返回承诺 1,否则 promise2 继续并返回 Promise.resolve() 解释:
const promise1 =(cond)=>{
const x = true;
if(!cond){
return Promise.reject(new Error('Error'))
}
return Promise.resolve('Done')
}
const promise2 =()=> {
//i want to return promise1 if it rejected
return promise1(false)
.then(res=>res)
.catch(e=>e)
//otherwise return Promise.resolve
return Promise.resolve('ok')
}
解决方法
你太复杂了。
第一个函数返回的 Promise 将遵循其成功路径或错误路径,具体取决于 cond
是真还是假。第二个函数不需要测试,因为 Promise 在这方面会照顾自己。
让我们调用函数 f1
和 f2
(它们是函数而不是承诺)。
f1
可以写成...
const f1 = (cond) => {
return cond ? Promise.resolve('Done') : Promise.reject(new Error('Error'));
}
而 f2
将是 ...
const f2 = () => {
return promise1(false)
.then(res => 'OK'); // whatever the result is,deliver 'OK'.
// No need to catch; error status,and its Error object,will naturally propagate to f2's caller.
}
或者,如果您对结果“完成”没有更改为“确定”感到高兴,那么只需写...
const f2 = () => f1(false); // No need for .then() or .catch()
,
您的结构不健康。看看这个:
const promise1 = cond => {
return new Promise((resolve,reject)=>{
if(!cond){
return reject(new Error('Error occur'));
}
return resolve('Done');
})
}
const promise2 = (cond) => {
if(!cond) {
//i want to return promise1 if it rejected
return promise1(cond)
.then(res=>res)
.catch(e=>{throw e});
}
//otherwise return Promise.resolve
return new Promise(resolve => {
return resolve("ok");
})
}
try {
promise2(true).then(result => {
console.log(result);
});
promise2(false).catch(err => {
throw err;
})
} catch (error) {
console.err(error.message);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。