首页 > 编程语言 >关于Javascript——Promise的一些理解

关于Javascript——Promise的一些理解

时间:2023-03-03 15:25:15浏览次数:38  
标签:resolve return 函数 Javascript 理解 promise reject Promise

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

相关文章

  • 深入理解webpack的chunkId对线上缓存的思考(转载)
    转载自 https://juejin.cn/post/6844903924818771981#heading-6 作者:Kimm想必经常使用基于webpack打包工具的框架的同学们,无论是使用React还是Vue在性能优化上使用最......
  • 如何在 JavaScript 中使用媒体查询
    前言说起媒体查询想必大家最先想到的都是CSS中@media,没错,这是我们最常用的媒体查询方法,主要用来为我们的网站做适配处理。比如:h1{font-size:2rem;color:green;......
  • JavaScript模块化理解-CommonJS、AMD、CMD、UMD、ES6
    参考:JavaScript模块化-CommonJS、AMD、CMD、UMD、ES6前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS 在JS早期,使用script标签引入JS,会造成以下问题:加载的时候阻塞......
  • 什么是云数据库?小白快速理解
    云原生数据库:是指通过云平台进行构建、部署、交付和自动运维的数据库服务。该服务通过是已DBass(Databaseasaservice)的形态,将数据库架构和实现细节隐藏起来,采用多租户和......
  • How to make an HTTP request in Javascript?
    YoucanmakeanHTTPrequestinJavaScriptusingthebuilt-infetch()functionortheXMLHttpRequest(XHR)object.Hereareexamplesofhowtouseeachofthes......
  • php之Opcache深入理解
    PHP项目中,尤其是在高并发大流量的场景中,如何提升PHP的响应时间,是一项十分重要的工作。而Opcache又是优化PHP性能不可缺失的组件,尤其是应用了PHP框架的项目中,作用更是明显。......
  • 学习操作系统P4 理解并发程序执行 (Peterson算法、模型检验与软件自动化工具)
    啊 多一个线程,在状态机里也可以理解为多一个栈帧啊啊啊错误如下图所示啊啊  当只有一个人想上厕所时,只有一个旗子被举起来,因此举旗的人可以直接进厕所......
  • 观于 可用性 的理解
    今天课上,读了《大型网站技术架构:核心原理与案例分析》的关于可用性的章节。什么是可用性?官方解释是说在某段时间,系统是否能够正常运行。正常运行的时间越长,可用性越强......
  • 安全高效 | AIRIOT智慧工地管理解决方案
    建筑工地施工材料、机械设备、工程车、人员各个环节管理相对复杂、建筑业也是安全事故频发的高危行业,安全管控尤为重要。建筑施工单位想要保障安全生产,做好能源消耗管控降低......
  • 【MongoDB】连接池理解及测试 NodeJS
    更新于2021-05-15最近对MongoDB连接池如何正确使用不是特别清楚,于是做了一些测试也查找了相关资料,终于知道了MongoDB的连接池是怎么工作的了。首先,在nodejsweb应用......