13.Promise

编程之家收集整理的这篇文章主要介绍了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',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/getJoke

const 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',data1)=>{
    //fs.readFile('./resources/插秧诗.md',data2)=>{
        //fs.readFile('./resources/观书有感.md',data3)=>{
			//let result = data1 + '\r\n' + data2 + '\r\n' + data3;
			//console.log(result);
        //})
    //})
//})

//使用Promise实现
const p = new Promise(function(resolve,data)=>{
        resolve(data)
	})
})

p.then(value=>{
    return new Promise(function(resolve,reject){
        fs.readFile('./resources/插秧诗.md',data)=>{
            resolve([value,data])
        })
	})
}).then(value=>{
    return new Promise(function(resolve,reject){
        fs.readFile('./resources/观书有感.md',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);
})

总结

以上是编程之家为你收集整理的13.Promise全部内容,希望文章能够帮你解决13.Promise所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群
编程之家官方2群
编程之家官方3群
编程之家官方4群

相关文章

猜你在找的ES6相关文章

ES6转ES5(Babel转码器) 前提:必须在VScode中已经安装了Node.js 官网:https://nodejs.org/en/ 一、安装命令行转码工具 npm install --glob
Map介绍 ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map也实现了iterator接口,所以可以使用【扩展
Object.fromEntries //二维数组 const result = Object.fromEntries([ [&amp;#39;name&amp;#39;,&amp;#39;Study
扩展运算符 [...]扩展运算符能将【数组】转换为逗号分隔的【参数序列】 //声明一个数组 const tfboys = [&amp;#39;y&amp;#39;,&amp;#39;w&amp;#39
简化对象写法 ES6允许再大括号里面,直接写入变量和函数,作为对象的属性和方法。 遮眼法的书写更加简洁 let name = &amp;#39;study&amp;#39;; let change =
函数参数默认值 ES6允许给函数参数赋值初始值 //1.形参初始值 具有默认值的参数,一般位置要靠后(潜规则) function add(a,b,c=10){ return aʻʼ } let
数值扩展 //0. Number.EPSILON 是 JavaScript 表示的最小精度 EPSILON 属性的值接近于 2.2204460492503130808472633361816E-16
ES6引入rest参数,用于获取函数的实参,用来替代arguments //ES5获取实参的方式 function date(){ console.log(arguments);//对象 } date
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注