您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Promise 是什么有什么、怎么用

Promise 是什么有什么及优缺点

ECMAscript 6 原生提供了 Promise 。
Promise 是一个构造函数,自身函数上有些常用方法,原型上有then、catch 同样很眼熟的方法。
	all: ƒ all()
	allSettled: ƒ allSettled()
	any: ƒ any()
	length: 1
	name: "Promise"
	prototype: Promise
		catch: ƒ catch()
		constructor: ƒ Promise()
		finally: ƒ finally()
		then: ƒ then()
		Symbol(Symbol.toStringTag): "Promise"
		[[Prototype]]: Object
	race: ƒ race()
	reject: ƒ reject()
	resolve: ƒ resolve()
	Symbol(Symbol.species): ƒ Promise()
	Symbol(Symbol.species): ƒ Promise()
	arguments: (...)
	caller: (...)

有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。

Promise 也有一些缺点。首先,无法取消 Promise,一旦新建它就会立即执行,无法中途取消。
其次,如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部。
第三,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

Promise 怎么用

封装一个 ajax 与 使用

//接口地址: https://api.xxx.top/getJoke
const p = new Promise(function(resolve, reject) {
    // 1. 创建对象
    const xhr = new XMLHttpRequest();
    // 2. 初始化
    xhr.open("GET","https://api.xxx.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);
})

封装一个本地文件内容

const fs = require('fs'); // 1. 引入 fs 模块
const p = new Promise(function(resolve, reject) {
    fs.readFile('./dmeo.md',(err,data) => {
        if(err) reject(err);
        resolve(data);
    });
});
p.then(function(value) {
    console.log('调用成功~');
    console.log(value.toString());
},function(reason) {
    console.log('文件读取失败~~');
})

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进