[英]Javascript promises - catch with/without function
几个小时前我刚刚开始学习 JavaScript 和 promises,我开始了解“流程”,但一些细节仍然不清楚。 让我们看看下面的例子:
function OnRejected(var){
return console.log("This is an error " + var)
}
Promise.reject(2).then(function(a){return a*2})
.then(function(a){return a+5})
.then(function(a){return a*3})
.then(console.log)
.catch(OnRejected)
上面代码的结果:这是错误2
上面的例子工作得很好。 我的问题是:如果我不调用函数,而是尝试在 catch 内直接调用“console.log("this is an error")”,为什么会失败? 像这样:
Promise.reject(3).then(function(a){return a*2})
.then(function(a){return a+5})
.then(function(a){return a*3})
.then(console.log)
.catch(console.log("This is an error"))
结果是:
(节点:39515)未处理的承诺拒绝警告:3
这是一个错误
(节点:39515)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。 这个错误要么是因为在没有 catch 块的情况下抛出了异步函数,要么是因为拒绝了一个没有用 .catch() 处理过的承诺。 (拒绝编号:2)
(节点:39515)[DEP0018] 弃用警告:不推荐使用未处理的承诺拒绝。 将来,未处理的承诺拒绝将以非零退出代码终止 Node.js 进程。
进程以退出代码 0 结束
不仅仅是“承诺”,我相信我缺乏关于 JS、console.log 和 console.log(“whatever”) 中的函数的知识。 任何帮助或建议都非常感谢。
catch()
和then()
期望接收一个函数作为参数。 在您的示例中, OnRejected
是一个函数,而console.log("This is an error")
不是。
再解释一下: console.log
是一个函数,但console.log('something')
是函数console.log
和参数'something'
的执行结果。
要返回catch()
和then()
,他们将调用您提供的方法(在您的示例中: OnRejected
)并使用先前解决的承诺返回的任何内容作为参数调用它。
例子 :
getDataFromDistantServer().then(function (data) => {
console.log(data)
return otherCallToOtherServer()
}).then( function (dataFromOtherServer) => {
console.log(dataFromOtherServer)
})
这也可以,因为doSomething
是一个函数:
var doSomething = function(data) {
console.log(data)
return otherCallToOtherServer()
}
getDataFromDistantServer()
.then(doSomething)
.then( function (dataFromOtherServer) => {
console.log(dataFromOtherServer)
})
旁注:您的函数OnRejected
命名约定将规定名称不要以大写字母开头,而是将其onRejected
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.