13.Promise

Promise介绍

Promise是ES6引入的异步编程的新解决方案。语法上Promise是一个构造函数,用来封装异步操作并可以获取其成功或失败的结果。

  1. Promise构造函数:Promise(excutor){}
  2. Promise.prototype.then方法
  3. Promise.prototype.catch方法
//实例化 Promise 对象const p = new Promise(function(resolve,reject){    setTimeout(function(){        //        let date = '数据库中的用户数据';        //resolve        resolve(data);                let err = '数据读取失败';        reject(err);    },1000);})//调用promise对象的then方法p.then(function(value){    console.log(value);//数据库中的用户数据},function(reason){    console.log(reason);//数据读取失败})

Promise封装读取文件

//1.引入fs模块const fs = require('fs');//2.调用方法读取文件//fs.readFile('./resources/为学.md',(err,data)=>{////判断失败 则抛出错误//  if(err) throw err;//  //如果没有出错,则输出内容//console.log(data.toString());//})//3.使用Promise封装const p = new Promise(function(resolve,reject){    fs.readFile('./resources/为学.md',(err,data)=>{    //判断如果失败        if(err) reject(err);        //如果成功        resolve(data)})})//调用promise对象的then方法p.then(function(value){    console.log(value。toString());},function(reason){    console.log('读取失败');})

Promise封装AJAX

//接口地址 https:api.apiopen.top/getJokeconst p = new Promise((resolve,reject)=>{    //1.创建对象    const xhr = new XMLHttpRequest();    //2.初始化    xhr.open('GET',"https:api.apiopen.top/getJoke");    //3.发送    xhr.send();    //4.绑定事件,处理响应结果    xhr.onreadystatechange = function(){        //判断        if(xhr.readyState === 4){            //判断响应状态码 200-299            if(xhr.status >= 200 && xhr.status < 300){                //表示成功                resolve(xhr.response);            }else{                //如果失败                reject(xhr.status);            }        }    }    })//指定回调p.then(function(value){    console.log(value);}function(reason){    console.log(reason);})

Promise.prototype.then方法

//创建Promise对象const p = new Promise(function(resolve,reject){    setTimeout(function(){        resolve('用户数据');        //reject('出错了');    },1000);})//调用then方法 then方法的返回结果是Proimse对象,对象状态由回调函数的执行结果方法决定//1.如果回调函数中返回的结果是 非pormise 类型的属性,状态为成功,返回值为对象的成功的值const result = p.then(value=>{    console.log(value);    //1.非 promise 类型的属性    return 'iloveyou';    //2.是 promise对象    return new Promise((resolve,reject)=>{        //resolve('ok');        reject('error');    })    //3.抛出错误    //throw new Error('出错了!');    throw '出错了';},reason=>{    console.warn(reason);})//链式调用p.then(value => {    },reason => {    }).then(value => {    },reason => {    })

Promise实践 读取多个文件

//引入fs模块const fs = require('fs');//调用方法读取文件//fs.readFile('./resources/为学.md',(err,data1)=>{    //fs.readFile('./resources/插秧诗.md',(err,data2)=>{        //fs.readFile('./resources/观书有感.md',(err,data3)=>{//let result = data1   '\r\n'   data2   '\r\n'   data3;//console.log(result);        //})    //})//})//使用Promise实现const p = new Promise(function(resolve,reject){    fs.readFile('./resources/为学.md',(err,data)=>{        resolve(data)})})p.then(value=>{    return new Promise(function(resolve,reject){        fs.readFile('./resources/插秧诗.md',(err,data)=>{            resolve([value,data])        })})}).then(value=>{    return new Promise(function(resolve,reject){        fs.readFile('./resources/观书有感.md',(err,data)=>{            //压入            value.push(data);            resolve(value);        })})}).then(value=>{    console.log(value.join('\r\n'));})

Promise.prototype.catch方法

const p = new Promise((resolve,reject)=>{    setTimeout(()=>{        //设置p对象的状态为失败,并设置失败的值        reject('出错了')    },1000)})p.then(value=>{},reason=>{  console.log(reason);})//catch语法糖p.catch(reason){  console.log(reason);})

来源:https://www.icode9.com/content-4-844601.html

(0)

相关推荐

  • promise的常用情况

    因为js是单线程的,所以一旦代码中有报错,就不会执行下面的了,如下333就未打印 console.log(111) throw Error(222) console.log(333) 好像与promi ...

  • 实现无感刷新token我是这样做的

    前言 最近在做需求的时候,涉及到登录token,产品提出一个问题:能不能让token过期时间长一点,我频繁地要去登录. 前端:后端,你能不能把token 过期时间设置得长一点. 后端:可以,但是那样做 ...

  • 异步编程之Promise

    一.Promise 1. .then 和.catch · resolved 状态的Promise 会回调后面的第一个.then · rejected 状态的Promise 会回调后面的第一个.catc ...

  • 如何在现代JavaScript中编写异步任务

    前言在本文中,我们将探讨过去异步执行的 JavaScript 的演变,以及它是怎样改变我们编写代码的方式的.我们将从最早的 Web 开发开始,一直到现代异步模式.作为编程语言, JavaScript ...

  • ES2020的这些新功能令人期待

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/es2020-has-been-finalized- ...

  • 火力全开,富士康为量产iPhone 13,给员工发放高额奖励!

    五一假期刚过没几天,相信不少人回到工作岗位后又重新忙碌了起来,作为全球最大iPhone组装厂的郑州富士康工厂自然也不例外,这里承担了全球范围内数量最多的iPhone生产任务,几十万人在一起工作,场景也 ...

  • 古人为何将13岁的少女,称为“豆蔻年华”,豆蔻到底代表着什么?

    "头上金钗十二行,足下丝履五文章",这是南朝梁武帝萧衍在<河中之水歌>中描写女主人公"莫愁"的诗句.诗中的莫愁,是一位美丽精致的女孩.在那个年代,女 ...

  • 让糖尿病、高血压等常见病闻风丧胆的13种...

    让糖尿病.高血压等常见病闻风丧胆的13种联合用药方案,家庭健康好帮手!看到了赶快收藏!   1.缬沙坦胶囊+尼群地平片---家庭健康好帮手---高血压   2.辛伐他汀片+降脂减肥片---家庭健康好帮 ...

  • 失眠、口腔溃疡、痛经,这13种常见病中成...

    失眠.口腔溃疡.痛经,这13种常见病中成药,解决健康路上拦路虎,赶快收藏,错过可惜! 1.地衣芽孢杆菌活菌胶囊❆❆❆畅通无阻❆❆❆肠炎 2.大黄利胆胶囊❆❆❆畅通无阻❆❆❆脂肪肝 3.清胰利胆颗粒❆❆ ...

  • 乾隆13岁临颜楷《多宝塔》手稿,老师的评语乾隆终生未能改正!

    乾隆即位前手稿 这幅仿写作品是乾隆登基前最后的手稿,因为登基后便为"御笔"了,再没人敢给与评语. 乾隆时期,高产经济作物大量流入,全国人口数量暴涨,清朝发展达到巅峰.乾隆在位期间大 ...

  • iPhone 13将加大毫米波机型出货量,应用爆发产业链有望获益

    苹果iPhone 13今年秋季将正式发布.近日又有消息曝出,天风国际分析师郭明錤发布苹果研究报告称,预计苹果将于秋季发布的iPhone 13中,毫米波机型比重从去年的30-35%,增至55-60%. ...

  • 男子中13亿,妻子立马离婚分钱买下30套房10辆豪车

    2021-05-01 英国一名男子中1.48亿英镑(约合人民币13亿元)后一口气买38套房.中奖没多久,他的妻子却和他离婚改嫁一名小自己8岁的男子,她拿着分到的钱也买了30套房.前段时间,女子为新丈夫 ...

  • 0-50传说丨第13集 最终章 宇宙矛盾论(下)

    0-50传说 第13集 最终章 宇宙矛盾论(下) 作者:欧原 ------------ "居然,被,打中了--"这不可能!坦克迪克森的防御被撼动了! "哈哈哈哈,凯,你这 ...

  • 叶笛‖我的天然石组诗(1-3)

    我的天然石之一 美女舞袖 我没有金刚石的硬度,但我有坚实的信心.我没有雕刻的剔透,但我有天然的玲珑.大自然鬼斧神工,让我别有绮丽.美女舞袖朝天潇洒一举,让多少人百十遍回眸.空灵其中,思绪千重. 我的天 ...