Javascript 在if语句中处理异步承诺

Javascript 在if语句中处理异步承诺,javascript,asynchronous,async-await,Javascript,Asynchronous,Async Await,我正在用javascript处理以下场景tt类似于包中的一个函数,如果某件事情没有发生,它将返回拒绝承诺。如果触发了拒绝承诺,我想布尔化test()函数中的wait tt()。当前设置会捕获错误,并且不会执行else()块。有没有办法克服这个问题 async function tt(){ return Promise.reject('failed'); } async function test(){ if (somecondition && awa

我正在用javascript处理以下场景
tt
类似于包中的一个函数,如果某件事情没有发生,它将返回拒绝承诺。如果触发了拒绝承诺,我想布尔化
test()
函数中的
wait tt()
。当前设置会捕获错误,并且不会执行
else()
块。有没有办法克服这个问题

async function tt(){
  
  return Promise.reject('failed');
  
}


async function test(){
  
  if (somecondition && await tt()) //assume somecondition is true    
  {
    console.log("accept")
  }
  else
  {
    console.log("reject")
  }
    
}

test()
.catch(err=>console.log(err))

我希望避免使用
。然后(res…).catch(err…)
您可以在自己的函数中使用
tt
来捕获错误:

async function wrapped_tt() {
  try {
    await tt();
    return true; // or return await tt(); depending on what tt returns
  } catch {
    return false;
  }
}
后来


当然,您可能希望检查由
tt
引发的错误,并且只决定为其中一些错误返回
false

所以您不关心已解析的值或拒绝错误?当然可以:

async function tt() {
  return Promise.reject("failed");
}

function promiseAsBoolean(p) {
  return p.then((s) => true, (e) => false);
}

async function test() {
  if (somecondition && (await promiseAsBoolean(tt()))) {
    console.log("accept");
  } else {
    console.log("reject");
  }
}

完美的我试着做
p.then((s)=>返回true,(e)=>返回false)async function tt() {
  return Promise.reject("failed");
}

function promiseAsBoolean(p) {
  return p.then((s) => true, (e) => false);
}

async function test() {
  if (somecondition && (await promiseAsBoolean(tt()))) {
    console.log("accept");
  } else {
    console.log("reject");
  }
}