微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

但是只有在被拒绝时才返回承诺?

如何解决但是只有在被拒绝时才返回承诺?

如果我有 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 在这方面会照顾自己。

让我们调用函数 f1f2(它们是函数而不是承诺)。

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 举报,一经查实,本站将立刻删除。