es6原生提供了promise对象,用于实现异步回调,以同步的写法实现异步过程,避免回调地狱。

特点:1、对象的状态不受外界的影响。Promise对象代表一个异步操作,有三种状态:pending、fulfilled、rejected。只有异步操作的结果可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。Promise-承若,的名字也因此而来。2、一旦状态改编,就不会再变,任何时候都可以得到这个结果。promise对象状态的改变只有两种可能:从pending到resolved和从pending到rejected。

优缺点:优点是避免回调地狱;缺点是promise无法取消,一旦新建就会立即执行,无法中途取消,内部抛出的错误不会反应到外部,当处于pending状态时无法得知目前进展到哪一阶段。

用法:

var promise = new Promise(function(resolve, reject) {
    //异步处理
    //处理结束后、调用resolve或reject
})

//实例
var myFirstPromise = new Promise(function(resolve, reject){
    //当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
    //在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
    setTimeout(function(){
        console.log('hhhh');
		reject("failed!"); //代码正常执行!
    }, 250);
});
 
myFirstPromise.then(function(successMessage){
    //successMessage的值是上面调用resolve(...)方法传入的值.
    //successMessage参数不一定非要是字符串类型,这里只是举个例子
    console.log("Yay! " + successMessage);
}).catch(function(error){
	console.log(error);
});
//'hhhh'
//'failed'


//Promise构造函数挂载在window上,有resolve和reject方法
var p = Promise.resolve('Hello');
 
p.then(function (s){
  console.log(s)
});
// Hello

注:performance对象用于精度度量、控制、增强浏览器的性能表现。