promise原理是什么

promise原理是什么,第1张

Promise用法为:

const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve('success') })})then(value => { }, reason => { })

Promise的构造函数接收了一个回调,这个回调就是执行器,执行器的参数resolve, reject也是两个函数,前者将promise改变为fulfiled,后者将其改变为rejected。可以在执行器内根据实际业务来控制是resolve或reject。

当promise状态变为fulfilled,所有onFulfilled将会按照最开始在then方法中注册的顺序去调用,当promise状态变为rejected,所有onRejected将会按照最开始在then方法中注册的顺序去调用。

then所属的Promise在pending状态,将then的回调(onFulfilled, onRejected)分别放入执行队列等待执行,而这两个队列内的函数只有在then所属的promise状态被改变的时候执行。保证了规范中的onFulfilled, onRejected的执行时机。

扩展资料:

promise返回的结果取决于shouldBePromise,假设shouldBePromise为false,那么promise就返回了字符串ok,下边就不能调用then方法。这个时候可以用Promise()resolve包起来,这样promise返回的始终是一个promise实例,保证了then方法的顺利调用。

假设promise被resolve了,由于then中传入了代表onFulfilled的回调并且返回值为success,那么promise的reason值为success。假设promise2被reject了,由于then中传入了代表onRejected的回调并且返回值为failed,那么promise的reason值是failed。

按照学习理解:

第一种情况,新建promise的resolve传出的值将作为then方法返回的promise的resolve的值传递出,console将打印出43

第二种情况,return的值将作为then方法返回的promise的resolve的值传递出,console将打印出44

第三种情况,虽然新建了promise,但对于then方法来说,没有向它返回的promise传递返回值,console将打印出undifined

第四种情况,同第三种情况,

第五种情况,then方法没有返回值,then方法的promise的resolve的值将传递出undifined。

以上三、四、五种情况,其实都是一样的问题,构造then方法的函数没有向then方法返回的promise对象的resolve方法传递值。因此resolve返回的都是undfined

测试结果:

测试结果:

三秒后打出结果

promise的核心原理其实就是发布订阅模式,通过两个队列来缓存成功的回调(onResolve)和失败的回调(onReject)。

promise原理实现:

promise可以有三种状态,分别是pedding、Fulfilled、Rejected。

Pending Promise对象实例创建时候的初始状态。

Fulfilled可以理解为成功的状态。

Rejected可以理解为失败的状态。

构造一个Promise实例需要给Promise构造函数传入一个函数。传入的函数需要有两个形参,两个形参都是function类型的参数。分别是resolve和reject。

promise的特点:

new Promise时需要传递一个executor执行器,执行器会立刻执行。

执行器中传递了两个参数:resolve成功的函数、reject失败的函数,他们调用时可以接受任何值的参数value。

promise状态只能从pending态转onfulfilled,onrejected到resolved或者rejected,然后执行相应缓存队列中的任务。

promise实例,每个实例都有一个then方法,这个方法传递两个参数,一个是成功回调onfulfilled,另一个是失败回调onrejected。

Promise用来表示延迟 *** 作也就是异步 *** 作的结果

Promise 对象代表了未来将要发生的事件,用来传递异步 *** 作的消息

Promise主要用于异步计算

Promise 创建 Promise 创建

pending 是 初始状态

fulfilled 是 *** 作成功的状态

rejected 是 *** 作失败的状态

1、接收两个函数作为参数,分别代表fulfilled(成功)和rejected(失败)

2、then()返回一个新的Promise实例,所以它可以链式调用

(1)如果then方法中回调函数返回一个值那么then返回的Promise将会成为Resolved状态,并且将返回的值

作为Resolved状态的回调函数的参数值。

var p = new Promise(function (resolve, reject) {

resolve('fun');

});

3、当前面的Promise状态改变时,then()根据其最终状态,选择特定的状态响应函数执行

4、状态响应函数可以返回新的promise,或其他值,不返回值也可以我们可以认为它返回了一个null;

5、如果返回新的promise,那么下一级then()会在新的promise状态改变之后执行

6、如果返回其他任何值,则会立即执行下一级then()

then的情况

1、因为then()返回的还是Promise实例

2、会等里面的then()执行完,再执行外面的

promise有三种状态:pending/reslove/reject 。pending就是未决,resolve可以理解为成功,reject可以理解为拒绝。

一个简易的promise例子:

promise的最终状态会凝固,成功了以后即便再执行reject('failed')状态也不会改变。

第一种就是上面的例子:

第二种就是把第一种方法的第二个函数拿出来做为catch,效果和第一种一样:

第三种,也可以只单独接收一种状态:

promise的 then 方法之后会继续返回一个promise对象

例子如下:

使用node执行后的结果如下:

从结果我们可以看出:使用then方法之后会返回一个promise对象,可以继续用then方法调用,再次调用所获取的参数是上个then方法return的内容;同时,我们还看到p先被打印出来,证明promise本身就是异步的,而且p本身也是一个pending状态的promise对象。

上面的这个例子只是一种情况,即第一次then之后所返回promise不会出现reject的状态,但如果我们在第一次then之后再手动返回一个可能包含reject状态的promise的话,那么错误链式调用过程中的错误处理就是大问题了,因为第二次then是不带错误处理机制的,这就要求我们在promise里的reject状态里直接写上对应的错误处理机制。具体的例子可以参见下篇文章。

上面的例子表示: 我们可以通过Promiseresolve()将一个字符串、数字或者对象等转换成一个成功状态的Promise对象。

但是如何我们将一个promise对象作为参数传递给Promiseresolve()方法会怎么样呢?

从结果上看: 将一个promise对象传递给Promiseresolve()方法会被直接返回。

使用方法和Promiseresolve一致。

es6中加入了promise来统一规范异步行为。promise中可以接收两个参数,res代表成功获得异步的值以后运行什么方法,rej代表失败以后运行什么方法。

1创建的时候就会立刻执行;

2一旦开始就不能停止;

3必须通过catch返回错误,否则不会d出错误。

promise 在处理多个异步函数执行的时候,有很大的优势,

尤其是他在处理正确和错误的时候,分的特别明确,

他唯一的缺点是当你需要一个队列的时候,你就需要一个then一个then往下写,

非常难受。

这里就为es7中async和await的诞生埋下了伏笔。

1跟then相对的方法,是catch,也可以一个catch接着一个往下写,是一样的。

2然后all方法,是按照队列里面速度最慢的那个去执行的,

他还有一个race方法,是谁速度快先执行谁,但是还是并行的,无法解决队列的问题。

promise  英 ['prɒmɪs]  美 ['prɑmɪs]

[ 过去式 promised 过去分词 promised 现在分词 promising ]

1、promise  作为名词,意思是许诺,允诺;希望

例You have my promise 给你我的承诺。

2、promise  作为及物动词,意思是允诺,许诺;给人以的指望或希望

例But you need to show him Promise me 但你一定要表现给他看,答应我。

3、promise作为不及物动词,许诺,承诺,保证

promise 侧重表自己的主观意向,设法用语言使人感到稳当可靠,所以很多“I promise”的句型。

[ + that ] The government have promised that they'll reduce taxes

政府已承诺要减税。

[ + (that) ] Promise me (that) you won't tell him

答应我你不会告诉他。

4、promise to do sth 承诺去做某事

例I promise to do all these things 我许诺做所有这些事情。

扩展资料:

例句

(1)He faithfully lived up to his promise

他忠实地实践了他的诺言。

(2)I redeemed my promise to my daughter by sending her a gift on herbirthday

女儿生日那一天我送给她一件礼物,履行了我对她的诺言。

(3)If you make a promise, abide by it

你如果做出诺言,就要履行诺言。

(4)One should keep to one's promise

(5)You have to remember your promise

你要记住你的承诺。

(6)Only promise me that you will smile 

不过您得答应我,您一定要笑。

(7)Promise what I tell you! 

答应我对你提出的要求!

以上就是关于promise原理是什么全部的内容,包括:promise原理是什么、Promise.then方法的返回值问题、promise原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10117013.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存