Javascript Promises catch 块不起作用?

Javascript Promises catch block not working?

我正在尝试创建一个同步调用 promises 的函数,这样如果它们中的任何一个 return false 执行停止并且 return 拒绝对象以及承诺的原因 returned false。

现在我收到错误: UnhandledPromiseRejection:此错误源于在没有 catch 块的情况下在异步函数内部抛出,或者拒绝未使用 .catch() 处理的承诺。承诺被拒绝,原因是“#”。

我做错了什么??我一直试图让它工作一个小时。 我必须 return 一个错误对象吗??

// call the function in my route

router.post('api/address', async (req, res) => {
      const status = await claimCheck()

     if (status.allowed = false) { // do something }   
})


const claimCheck = async () => {
  
  try {
    
   // run these synchronously so if promise fails/rejects/returns false, execution stops
    await allowedArea() 
    await validSubscription() 

   // IF ALL PASS return success object
   return {allowed: true, reason: "PASS"}
  } catch (err) {

     console.log(err.reason) 
    // If a promise rejects, I want to access the reject object properties here
    return err
  
  }
}

// PROMISE 1 - SHOULD REJECT

const allowedArea = new Promise(function (resolve, reject) {
  console.log("CLAIM COORDS ALLOWED AREA CHECK")
  const allowed = false

  if (allowed == false) {
    reject({ allowed: false, reason: "Area blocked" })
  }
  resolve()
})

// PROMISE 2 - SHOULD REJECT
const validSubscription = new Promise(function (resolve, reject) {
  const allowed = false

  if (allowed == false) {
    reject({ allowed: false, reason: "Bad Subscription" })
  }
  resolve()
})


如评论中所述,allowedAreavalidSubscription 不是函数。 你应该等待他们而不执行:

await allowedArea;
await validSubscription;

作为参数传递给 promise 的函数将在实例化后立即执行。

您在声明它们之前还使用了 consts allowedArea 和 validSubscription(与 claimcheck func 相同),这意味着只会提升 var 声明,而不是初始化,您应该将声明移至顶部。 查看更多 here

如果要声明在底部,可以声明为async function ...,而不是new Promise,这样就全部吊起来了;