Promise
Promise 是异步编程的一种解决方案
所谓 Promise ,简单来说 就是一个容器,里面保存这某个未来才会结束的事件(通常是一个异步操作)的结果。
从语法上:Promise 是一个对象,他可以获取异步操作的消息
Promise提供统一的API,各种异步操作都可以用同样的方法进行处理,
Promise对象有两个特点: ⑴ 对象的状态不受外界影响 ⑵ 一旦状态改变,就不会再变,任何时候都可以得到这个结果。
Promise有三个状态:pending (待定) 初
始状态 fulfilled (实现) 操作成功 rejected (被否决) 操作失败
Promise :无法取消Promise,一旦新建他就会立即执行,无法中途取消,若不设置回调函数,Promise内部抛出的错误,不会反应到外部,当处于pending状态是,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)
基本用法
ES6 规定,Promise 对象是一个构造函数,用来生成Promise实例。
var p = new Promise(function (resolve, reject) { setTimeout(function () { console.log('执行') resolve('huahau') },2000) })
//异步限时操作
Promise构造函数接受一个函数作为一个参数,该参数的两个参数分别是 resolve 和 reject
resolve函数的作用:将Promise对象状态 pending 变为resolve ,在异步操作成功是调用,并将异步操作的结果,作为参数传递出去。
reject函数的作用:将Promise对象状态 pending 变为rejected,在异步操作失败时调用,并将异步操作报出的错误,作为参数 传递 出去。
Promise 实例生成以后,可以用then方法分别指定 resolved状态 和rejected状态的回调函数
Promise
function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(resolve, ms, 'done'); }); } timeout(100).then((value) => { console.log(value); });
//输出结果 结果为 done
上面代码中,timeout方法返回一个Promise 实例 表示一段时间以后才会发生的结果,过了指定的时间(ms参数)以后
Promise实例的状态变为resolved,就会触发then方法绑定的回调函数。
Promise 新建后会立即执行
var p = new Promise(function (resolve, reject) { setTimeout(function () { console.log('执行') resolve('huahau') },2000) })
//输出结果: 执行
let promise = new Promise(function(resolve, reject) { console.log('Promise'); resolve(); }); promise.then(function() { console.log('resolved.'); }); console.log('Hi!'); // Promise // Hi! // resolved
new Promise((resolve, reject) => { resolve(1); console.log(2); }).then(r => { console.log(r); });
// 输出结果
// 2
// 1
调用resolve(1)以后,后面的console.log(2)还是会执行,并且会先一步打印出来
立即 resolved 的 Promise 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务