我刚刚开始学习JavaScript,并在几个小时前就答应了,现在我已经开始了解“流程”了,但是一些细节仍然不清楚。让我们看下面的示例:
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(“这是一个错误”)“,为什么它会失败?像这样:
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)UnhandledPromiseRejection警告:3
这是一个错误
(节点:39515)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:2)
(节点:39515)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零退出代码终止Node.js进程。
流程结束,退出代码为0
我相信我对JS,console.log和console.log(“ whatever”)中的函数的了解不多。任何帮助或建议都非常感谢。
答案 0 :(得分:1)
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