JavaScript,Promise.然后返回值



Promises进行一些研究,我知道Promise对象可以在三个状态(待处理,解决,被拒绝(。负责这三个状态中每一个的逻辑是在回调函数中,该函数将传递到Promise构造函数中。此回调函数具有2个函数作为其参数解决和拒绝,当此回调导致成功或失败时被调用。

实例化Promise后,我们可以通过在其上调用.then函数将响应处理程序回调添加到承诺中。.then函数将2个回调函数作为其参数。第一个参数是调用回调函数,以防Promise Resolve函数被调用,并且在调用Promise拒绝函数的情况下调用第二个回调。您也可以在Promises上致电.catch来处理被拒绝的承诺,尽管这只是句法糖:

.then(undefined, () => { failure callback})

我发现难以理解的是.then方法返回Promise的事实。例如,在以下代码中:

示例

let random = (Math.random() * 10);
let promise = new Promise((res, rej) => {
  if (random >= 5) {
    res(random);
  }
  rej(random);
});
promise
  .then(
    (nr) => {
      console.log("succes: " + nr);
      return nr + 5;
    })
  .then((nr) => {
    console.log(nr);
  })
  .catch(
    (nr) => {
      console.log("failure: " + nr);
    })

问题:

在第一个.then的示例中,它返回:nr + 5。在Promise的解决情况下,此值将成功地传递到第二个.then上。这怎么可能?是在引擎盖下:

return new Promise((res,rej) => {
    res(nr + 5)
})

还是其他因素引起的?

这是承诺的行为,在此描述

https://developer.mozilla.org/en-us/docs/web/javascript/reference/global_objects/promise/promise/then

返回值部分:

如果处理程序函数返回值,则then返回的承诺 通过返回值作为其值解决;

是的,这是承诺的主要特征之一:它们是可链的。

then方法确实返回了一个新的承诺,该承诺将在回调的结果下解决。它确实确实构建了new Promise,并在调用回调时确实将resolve调用。

您可能想查看此玩具实施方式,以查看如何实施(不,没有错误处理(。

看一下:承诺链接

通常,一个由一个。然后立即传递给下一个处理程序的值。但是有一个例外。

如果返回的值是承诺,则将进一步执行暂停直到结算。之后,该诺言的结果将给下一个处理程序。

基本上,当您返回值时,即:(nr + 5) or 5 or [1, 2] or {a: 1}等。

最新更新