用作.then()的第一个参数

时间:2019-01-07 10:49:20

标签: javascript asynchronous promise

为什么我们必须在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()也是一个函数。

1 个答案:

答案 0 :(得分:2)

() => {...}中包装函数是创建一个新的等待调用的匿名函数。

通过编写.then(anotherFunction()),您将在被读取后立即调用该功能。在您的示例中,因为anotherFunction没有返回值,所以它等同于.then(undefined)

逐步,这里发生的是您的代码启动您的异步请求,然后继续进行预读。在then块中,看到一个立即被调用的函数,console.log运行返回undefined。最终,诺言得以解决,.then(undefined)被调用。

如果.then已被咖喱化并从中返回一个应在完成时执行的新功能,则将调用的函数传递给anotherFunction可能会很有用。

要以所需的方式进行此工作,您只需将函数传递给then块而不调用它(而不是通过调用将函数的返回值传递给它)。

.then(anotherFunction)

这里anotherFunction仅在其承诺解决后才用承诺的返回值调用。