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原理是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)