1、创建Promise
var myPromise = new Promise(function(resolve, reject){})
resolve:执行成功执行的方法reject:执行失败调用的方法
2、使用Promise
function testSuccess(data){console.log(data);}function testError(data){console.log(data)}function test(resolve, reject){if(true){resove(true)} else {reject("错误")}}var testPromise = new Promise(test);testPromise.then(testSuccess).cath(testError);
new Promise() : 新建Promisetest : Promise处理过程,处理完成后,调用resolve或者reject方法testPromise.then(testSuccess) : then中的testSuccess即为Promise中resolve方法testPromise.catch(testError): catch中的testError即为Promise中reject方法
3、多个Promise连环调用
function anotherPromise(val) {return new Promise(function(resolve,reject){resolve(++val);})}var testPromise = new Promise(test);testPrimise.then(anotherPromise).then(anotherPromise).then(testSuccess).catch(tesError);
通过返回Promise 可以实现Promise的连环调用。如:在一个ajax结束后再进行另外一个ajax。
4、多个Promise同时调用,返回所有的数据
var p1 = new Promise(fucntion(resolve, reject){setTimeout(resolve, 500, 'P1');})var p2 = new Promise(fucntion(resolve, reject){setTimeout(resolve, 600, 'P2');})// 同时执行p1和p2,并在它们都完成后执行then:Promise.all([p1,p2]).then(function(results){console.log(results); // 获得一个Array:['p1', 'p2']})
可以同时执行多个Promise,在全部完成后调用resolve
5.多个Promise同时调用,返回最快resolve的数据
var p1 = new Promise(fucntion(resolve, reject){setTimeout(resolve, 500, 'P1');})var p2 = new Promise(fucntion(resolve, reject){setTimeout(resolve, 600, 'P2');})// 同时执行p1和p2,并在它们都完成后执行then:Promise.race([p1,p2]).then(function(result){console.log(result); // 'P1'})
