Promise是一个构造函数,promise是通过Promise构造函数声明的对象。
promise对象用来“管理”一次异步任务。
通过new Promise()声明一个promise对象的时候需要传两个参数,一个是resolve(),一个是reject()。
let promise = new Promise(resolve,reject){......}
这里的resolve和reject,其实就是两个callback。关于callback:建议看这个【一句话攻略】彻底理解JS中的回调(Callback)函数 - Rockage的文章 - 知乎 https://zhuanlan.zhihu.com/p/113069353
这里的resolve和reject可以理解为两个“形参”,不是具体的函数。他们的作用是在声明promise对象的时候,设定好resolve()和reject()的执行时机。
let promise = new Promise(resolve,reject) { /* 这里就写一些代码段,给你声明的promise对象传属性 */ const a = 1; const b = 2 const c = 3; //随便你写什么,用来给你的promise对象设置属性的 if(/*某条件为true,比如说你可以在这里请求Ajax,如果请求成功并且readystate === 4的时候,让他resolve*/) {resolve(a)};//就像我上面说的,这里的resolve你就当做一个插槽,他只是表示我要执行resolve()函数了,但具体函数是啥我不知道。同时这里可以给resolve()函数传参,这个参数将作为实参传递进then()里面的函数 else(/*某条件*/) {reject(b)};//和resolve那里一样 }
像我注释里写的一样,这里的resolve()和reject(),只是为了告诉js引擎这里我该执行resolve()或者这里我该执行reject(),而resolve()和reject()具体是什么函数、实现什么样的功能,是需要通过then()传递进来的。
then():Promise构造函数的原型对象上的一个方法,通过promise.then()调用,他最多接收两个参数:第一个参数是resolve(),第二个函数时reject()。这两个函数才是你promise对象真正要执行的函数。
promise.then(function1(value1){/*代码段*/}) //then的第一个参数,就是调用他的那个promise对象的resolve()函数,value1用来接收创建promise实例对象时候给resolve()传的值,在我们的例子里value1 = a = 1 promise.then(null,function2(value2){/*代码段*/} //then的第二个参数,是调用它的那个promise对象的reject()函数,value2用来接收创建promise实例对象时候给reject()传的值,在我们的例子里value2 = b = 2
到这里,一个最简单的、没有promise链的promise——then就实现了
然后我们开始讨论一个问题——then()。
then()接收一个或两个参数:第一个用于完成状态resolve的回调,第二个用于拒绝状态reject的回调。
then()会创建并返回一个新的promise,这个promise用于实现Promise链式流程控制。
如果then()里面的function()的return是一个非promise,他实际上相当于:
//我们习惯的写法 then(function(){ return '1234'; }) //他内部实际上的样子 then(function(){ return new Promise.resolve('1234')//如果这个then()后面还有.then(),那么后面的那个.then()就是用来服务这个Promise.resolve('1234')的 }) then(function(){ throw 'error'; }) then(function(){ return new Promise.reject('error') })
如果then()里面的function()的return是一个promise,他实际上就是
then(function(){ return new Promise(resolve,reject){ if(/*某个条件*/) resolve(value1); else(/*某个条件*/) reject(value2); } }).then()//这个then()继续按照之前的那个逻辑服务上面return的那个promise,就这么一直链下去,形成promise链
所以说整个promise链,用大白话讲他的流程就是:
在promise内部做一些事情,做完了之后(无论成功或者失败,反正用你写的条件来判断),执行为该promise服务的那个then()里面的函数,如果他里面还是promise,那么就循环下去
标签:resolve,return,函数,Javascript,理解,promise,reject,Promise From: https://www.cnblogs.com/ligoudan0801/p/17175014.html