【发布时间】:2018-07-14 13:43:26
【问题描述】:
我已经解决了这个问题,所以我的问题更多是理论上的,因为我试图了解幕后发生的事情以及为什么我需要在
上进行回调return Promise.reject()
这是我用来验证路由的代码
async customAuth(req, res, next) {
let token = req.header('x-auth');
try{
const userByToken = await User.findByToken(token)
const userByCreator = await User.findOne({_id: req.body.creator})
if (!userByToken || !userByCreator) {
return Promise.reject()
}
else if(userByToken.tokens[0].token !== userByCreator.tokens[0].token){
console.log('its here')
return Promise.reject().catch((err)=>{
res.status(401).send('why do i need this callback?')
})
}
next()
}catch(err){res.status(401).send("something happened")}
}
正如您在比较 userByToken 和 userByCreator 时看到的那样,我正在尝试使用回调调用 return Promise.reject()。 如果我尝试删除回调,它会在控制台中告诉我我有未处理的承诺。这很奇怪,因为这段代码
if (!userByToken || !userByCreator) {
return Promise.reject()
}
工作得很好,并发送 try 块直接捕获而不给出未处理的承诺错误。
问题
为什么我必须进行回调?就像理论上一样,为什么如果我删除回调它会告诉我它未处理的承诺?
附言 看来问题也可以解决
const rejected = await customAuth(Promise.reject('promise was rejected'));
return rejected
但是为什么这段代码可以工作,
if (!userByToken || !userByCreator) {
return Promise.reject()
}
但是当我尝试放入比较 IF 块时,它说未处理?
【问题讨论】:
-
我不明白你说“我为什么要进行回调”或“Promise.reject() 带有回调”是什么意思?
-
您是否意识到
return Promise.reject()不会导致它转到此函数中的catch块?这只是从这个函数返回一个被拒绝的承诺。现在,如果您选择了throw new Error("some error"),那将转到您的catch块。 -
我的意思是为什么当我说 if(!userByToken){return Promise.reject()} 效果很好但是如果我在比较它认为的令牌时尝试将相同的 return Promise.reject 放在 IF 块内为“不好,需要回调
-
你能告诉我们
customAuth()是如何被调用的吗?如果你要返回一个被拒绝的承诺,那么这就是需要处理这些拒绝的地方。 -
只是把它作为一个函数放在路由中,问题肯定不存在。下面的答案给出了一个更具体的解释,我只是想知道我怎样才能通过第二次拒绝达到外部捕获
标签: javascript jquery angularjs node.js callback