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 是在本轮事件循环的末尾执行,总是晚于本轮循环的同步任务

 

posted @ 2018-12-04 16:42  jade柒  阅读(118)  评论(0编辑  收藏  举报