为什么我们必须在function() {/*call some other function*/}
中写() => {}
或.then()
来保证?
例如,我们有一个诺言
someFn = () => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Resolved");
}, 2000);
})
}
我们还有随机函数
anotherFn = () => {
console.log("in time");
}
要链接这些功能,我们将使用.then()
someFn().then(success => console.log(success)).then(() => anotherFn());
我的问题是,如果我像这样写anotherFn()
,为什么.then(anotherFn())
立即执行,而如果有() => {}
,它为什么要等待执行?
据我所知,.then()
接受的第一个参数是onFulfilled
,这是一个函数,anotherFn()
也是一个函数。
答案 0 :(得分:2)
在() => {...}
中包装函数是创建一个新的等待调用的匿名函数。
通过编写.then(anotherFunction())
,您将在被读取后立即调用该功能。在您的示例中,因为anotherFunction
没有返回值,所以它等同于.then(undefined)
。
逐步,这里发生的是您的代码启动您的异步请求,然后继续进行预读。在then
块中,看到一个立即被调用的函数,console.log
运行返回undefined
。最终,诺言得以解决,.then(undefined)
被调用。
如果.then
已被咖喱化并从中返回一个应在完成时执行的新功能,则将调用的函数传递给anotherFunction
可能会很有用。
要以所需的方式进行此工作,您只需将函数传递给then
块而不调用它(而不是通过调用将函数的返回值传递给它)。
.then(anotherFunction)
这里anotherFunction
仅在其承诺解决后才用承诺的返回值调用。