美文网首页
Promise(异步编程的解决方案)

Promise(异步编程的解决方案)

作者: 救救小亮 | 来源:发表于2019-04-22 11:33 被阅读0次

Promise的含义

Promise是异步编程的一种解决方案,比传统的解决方案(回调函数和事件)更合理,更强大。ES6将其写入了语言标准,统一了用法,原生js提供了Promise对象。
所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,从语法上说Promise是一个对象,可以通过它获取异步操作的信息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。

Promise的优缺点

优点

将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

缺点

1.无法取消,一旦新建就会立即执行,无法中途取消。
2.如果不设置回调函数,在Promise内抛出的错误不会反映到外部,无法得知目前的进度。

写法

Promise对象有三种状态

1.Pending,Promise对象的初始状态
2.Resolved,任务执行完成且成功的状态
3.Rejected,任务执行完成且失败的状态

Promise对象必须实现then方法,then是promise规范的核心,而且then方法也必须返回一个Promise对象,同一个Promise对象可以注册多个then方法,并且回调的执行顺序跟它们的注册顺序一致;
then方法接受两个回调函数,它们分别为:成功时的回调和失败时的回调;并且它们分别在:Promise由Pending状态转换到Resolved状态时被调用和在Promise由Pending状态转换到Rejected状态时被调用。

示例

//用promise封装ajax请求
function ajaxPromise(_url,type){
    return new Promise(function(resolve,reject){
          var xhr = new XMLHttpRequest();
          xhr.open(type,_url);
          xhr.send();
          xhr.addEventListener("readystatechange",function(){  
            if(xhr.readyState != 4){
                return;
            }
            if(xhr.readyState==4&&xhr.status==200){
                var res = JSON.parse(xhr.responseText);
                resolve(res);
            }
            else{
                reject();
            }
          })
    });
}
//调用封装的ajax
ajaxPromise(baseUrl+"recommendPoetry","get").then(function(res){
    console.log(res);
}).catch(function(err){
    console.log("请求失败");
});

特性

立即执行性
var a = new Promise(fuction(resolve,reject){
    console.log(1);
    resolve(2);
});

console.log(3);

a.then((res)=>{
    console.log(res);
})

// 1  3  2
不可逆性
var a = new Promise(fuction(resolve,reject){
    resolve(1);
});
a.then((res)=>{
    console.log(res);    //1
    return res+1;
}).then((res)=>{
    console.log(res);    //2
}).then((res)=>{
    console.log(res);    //undefinde
});
回调异步
var a = new Promise(fuction(resolve,reject){
    resolve(1);
});
console.log(2);
a.then((res)=>{
    console.log(res);
})
// 2  1

相关文章

  • 知识点整理之ES6

    .说说Promise Promise 是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更合理、...

  • ES6 Promise简单封装

    /* * Promise --是异步编程的一种解决方案 消除异步操作(有了Promise对象,就可以...

  • Promise 对象

    Promise 对象 Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函...

  • 什么是Promise,它到底解决了什么问题?

    什么是Promise Promise 是异步编程的一种解决方案 Promise 核心 Promise 概括来说是对...

  • 阮一峰ES6教程读书笔记(十二)Promise对象

    Promise对象 1. Promise概述 Promise是异步编程的一种解决方案,它比传统的额解决方案--回调...

  • 理解【ES6】Promise

    什么是Promise Promise是异步编程的一种解决方案,比传统的异步解决方案【回调函数】和【事件】更合理、更...

  • Es6promise的用法

    Promise 的基本用法 Promise是异步编程的一种解决方案,Promise的优缺点优点将异步操作以同步操作...

  • Node异步编程

    Node异步编程 目前的异步编程主要解决方案有: 事件发布/订阅模式 Promise/Deferred模式 流程控...

  • React学习笔记(9)Promise

    阮一峰ES6 Promise Promise定义 Promise 是异步编程的一种解决方案,所谓Promise,简...

  • 初识es6 Promise

    Promise简介 Promise 是异步编程的一种解决方案,有了Promise对象,就可以将异步操作以同步操作的...

网友评论

      本文标题:Promise(异步编程的解决方案)

      本文链接:https://www.haomeiwen.com/subject/hioegqtx.html