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()
})
如评论中所述,allowedArea
和 validSubscription
不是函数。
你应该等待他们而不执行:
await allowedArea;
await validSubscription;
作为参数传递给 promise 的函数将在实例化后立即执行。
您在声明它们之前还使用了 consts allowedArea 和 validSubscription(与 claimcheck func 相同),这意味着只会提升 var 声明,而不是初始化,您应该将声明移至顶部。
查看更多 here
如果要声明在底部,可以声明为async function ...
,而不是new Promise
,这样就全部吊起来了;
我正在尝试创建一个同步调用 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()
})
如评论中所述,allowedArea
和 validSubscription
不是函数。
你应该等待他们而不执行:
await allowedArea;
await validSubscription;
作为参数传递给 promise 的函数将在实例化后立即执行。
您在声明它们之前还使用了 consts allowedArea 和 validSubscription(与 claimcheck func 相同),这意味着只会提升 var 声明,而不是初始化,您应该将声明移至顶部。 查看更多 here
如果要声明在底部,可以声明为async function ...
,而不是new Promise
,这样就全部吊起来了;