千家信息网

promise原理是什么

发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,本篇文章为大家展示了promise原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 promise应用场景1 解决回调地狱比如我们经常可能需要异步
千家信息网最后更新 2025年11月16日promise原理是什么

本篇文章为大家展示了promise原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、 promise应用场景

1 解决回调地狱

比如我们经常可能需要异步请求一个数据之后作为下一个异步操作的入参

getData(function(a){      getMoreData(a, function(b){        getMoreData(b, function(c){             getMoreData(c, function(d){                 getMoreData(d, function(e){                     ...                });            });        });    });});

可以发现上面的代码看起来是非常可怕的,层层嵌套,如果在加上复杂的逻辑判断,代码可读性会变得非常差。

但是你如果使用promise的话:

function getData() {    return new Promise(function (resolve, reject) {        resolve(1);    });}function getMoreData(arg) {    return new Promise(function (resolve, reject) {        resolve(arg + 10);    });}getData().then(function (a) {    console.log(a); // 1    return getMoreData(a);}).then(function (b) {    console.log(b); // 11})

把上面代码再简洁点儿

getData().then(a => getMoreData(a)).then(b => console.log(b));

2 promise 可以实现在多个请求发送完成后 再得到或者处理某个结果

// 两个数据都回来之后再进行操作let fs = require('fs');fs.readFile('./1.txt', 'utf8', function (err, data) {    console.log(data);})fs.readFile('./2.txt', 'utf8', function (err, data) {    console.log(data);})使用promise的话就可以实现:let fs = require('fs');function read(url){    return new Promise(function(resolve,reject){        fs.readFile(url,'utf8',function(err,data){            if(err)reject(err);            resolve(data);        })    })}Promise.all([read('1.txt'),read('2.txt')]).then(data=>{    console.log(data);},err=>{    console.log(err);});

二、promise原理实现

1.最简单的实现

基于上面的应用场景发现promise可以有三种状态,分别是pedding 、Fulfilled、 Rejected。

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

Fulfilled 可以理解为成功的状态

Rejected可以理解为失败的状态

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

Promise上还有then方法,then 方法就是用来指定Promise 对象的状态改变时确定执行的操作,resolve 时执行第一个函数(onFulfilled),reject时执行第二个函数(onRejected)

当状态变为resolve时便不能再变为reject,反之同理。

基于上面描述我们可以实现一个这样的promise

function Promise(executor){ //executor执行器    let self = this;    self.status = 'pending'; //等待态    self.value  = undefined; // 表示当前成功的值    self.reason = undefined; // 表示是失败的值    function resolve(value){ // 成功的方法        if(self.status === 'pending'){            self.status = 'resolved';            self.value = value;        }    }    function reject(reason){ //失败的方法        if(self.status === 'pending'){            self.status = 'rejected';            self.reason = reason;        }    }    executor(resolve,reject);}Promise.prototype.then = function(onFufiled,onRejected){    let self = this;    if(self.status === 'resolved'){        onFufiled(self.value);    }    if(self.status === 'rejected'){        onRejected(self.reason);    }}module.exports = Promise;

上述内容就是promise原理是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

状态 函数 方法 原理 成功 两个 代码 内容 场景 实例 对象 就是 技能 数据 知识 面的 形参 应用 可怕 复杂 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 干休所抓网络安全 我的世界租赁服务器怎么加载组件 江苏商务进口软件服务器虚拟主机 互联网科技实力论文 深圳西部网络技术有限公司 换台电脑不能导出数据库 天上不会掉馅饼网络安全海报 家用电话变服务器 网络安全四小会议 成都建筑设计研究院网络安全 西宁广东网络安全培训 优的企业系统软件开发 戴尔服务器无法创建逻辑分区 本地安全账户数据库 集成式分布式数据库还有其他吗 网络安全绘画三年级八开纸 软件开发及销售税收 乱斗西游服务器有哪些 新乡聚贤网络技术 浩鲸科技数据库面试题 美国代理服务器vpn 开展网络安全教育活动的报道 高州软件开发 BIOS存放数据库管理系统 自动备份数据库脚本 100万的服务器什么配置 美食大战老鼠黑糖服务器 软件开发合同如何写验收方式 数据库代码的大小怎么设置 介绍一下网络技术助理的实习内容
0