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

问题描述

如果我有 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);
}