什么是promise?html
promise 翻译成中文的意思是 "承诺" ,一个承诺说出去了说明他是进行中的,承诺兑现了表明成功,没有兑现表明失败了。ajax
promise 对象的状态一旦发生改变,就不可逆json
promise有三个状态:promise
pending 进行中服务器
resolved 成功 成功后执行 promise 的 then() 方法的第一个参数,第二个参数是指失败后执行的参数异步
rejected 失败 失败后还能够执行 promise 的 catch() 方法的参数函数
大白话:假期我承诺 “不打游戏” ,这个承诺就是 pending 状态。假期后没打游戏,就表明这个承诺成功了,就是 resolve 状态,能够给本身一个奖励,这个奖励用 then() 方法执行,反之就是失败了,就是 rejected 状态,给本身一个惩罚,这个惩罚就是 catch() 方法。url
promise 是一个用来解决异步问题的构造函数。spa
解决定时器的异步,使定时器同步执行翻译
function fn(){ var pro = new Promise( function(succ,failed){ setTimeout( function(){ console.log( 1 ); succ(); } , 1000) } ) return pro; }
var promise = fn(); promise.then( function(){ console.log( 2 ) } )
解决 ajax 的异步,使其同步执行
//ajax封装 使用promise对象 function ajaxPromise(url){ var pro = new Promise(function(succ,failed){ var ajax = new XMLHttpRequest(); ajax.open( "get" , url ); ajax.send(); ajax.onreadystatechange = function(){ if( ajax.readyState == 4 && ajax.status == 200 ){ //成功了 ajax.responseText succ(ajax.responseText);//通知promise对象ajax请求服务器的数据成功了 } } //承诺多久后若是没有通知promise对象成功 就通知失败 setTimeout( function(){ failed("请求服务器失败"); },5000 ) }) return pro; } var pro = ajaxPromise("../data.json"); pro.then( function(msg){ alert( msg ); },function(msg){ alert( msg ); } )