[英]Return values from SetTimeout function ( 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,那么进一步的执行将被暂停,直到它结束。 之后,该承诺的结果将被赋予下一个.then处理程序。
基本上,当你返回一个值,即: (nr + 5) or 5 or [1, 2] or {a: 1}
等时,该值立即传递给下一个处理程序(.then)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.