Promise 是什么有什么、怎么用

本文深入探讨了ECMAScript 6中Promise对象的定义、常用方法如then/catch、all/race/reject/resolve等,以及其如何简化异步操作并解决回调地狱问题。同时揭示了Promise的局限性,如不可取消、错误处理和状态透明性。
摘要由CSDN通过智能技术生成

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('文件读取失败~~');
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值