繁体   English   中英

Javascript,Promise.then返回值

[英]Javascript, Promise.then return values

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

在实例化Promise之后,我们可以通过调用它上面的.then函数将响应处理程序回调添加到promise。 .then函数将2个回调函数作为其参数。 第一个参数是在调用Promise resolve函数时调用回调函数,在调用Promise reject函数的情况下调用第二个回调函数。 您也可以在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/then

在返回值部分:

如果处理函数返回一个值,返回的承诺, then获取与返回的值作为其值解决;

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

then方法确实返回一个新的promise,它将使用回调的结果解析 它确实构造了一个new Promise ,并在调用回调时使用返回值调用resolve

您可能想看看这个玩具实现 ,看看它是如何实现的(尽管没有错误处理)。

看看这个: 承诺链接

通常,.then处理程序返回的值会立即传递给下一个处理程序。 但是有一个例外。

如果返回的值是一个promise,那么进一步的执行将被暂停,直到它结束。 之后,该承诺的结果将被赋予下一个.then处理程序。

基本上,当你返回一个值,即: (nr + 5) or 5 or [1, 2] or {a: 1}等时,该值立即传递给下一个处理程序(.then)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM