1、创建Promise

  1. var myPromise = new Promise(function(resolve, reject){})

resolve:执行成功执行的方法
reject:执行失败调用的方法

2、使用Promise

  1. function testSuccess(data){
  2. console.log(data);
  3. }
  4. function testError(data){
  5. console.log(data)
  6. }
  7. function test(resolve, reject){
  8. if(true){
  9. resove(true)
  10. } else {
  11. reject("错误")
  12. }
  13. }
  14. var testPromise = new Promise(test);
  15. testPromise.then(testSuccess).cath(testError);

new Promise() : 新建Promise
testPromise处理过程,处理完成后,调用resolve或者reject方法
testPromise.then(testSuccess)then中的testSuccess即为Promiseresolve方法
testPromise.catch(testError)catch中的testError即为Promisereject方法

3、多个Promise连环调用

  1. function anotherPromise(val) {
  2. return new Promise(function(resolve,reject){
  3. resolve(++val);
  4. })
  5. }
  6. var testPromise = new Promise(test);
  7. testPrimise.then(anotherPromise).then(anotherPromise).then(testSuccess).catch(tesError);

通过返回Promise 可以实现Promise的连环调用。如:在一个ajax结束后再进行另外一个ajax

4、多个Promise同时调用,返回所有的数据

  1. var p1 = new Promise(fucntion(resolve, reject){
  2. setTimeout(resolve, 500, 'P1');
  3. })
  4. var p2 = new Promise(fucntion(resolve, reject){
  5. setTimeout(resolve, 600, 'P2');
  6. })
  7. // 同时执行p1和p2,并在它们都完成后执行then:
  8. Promise.all([p1,p2]).then(function(results){
  9. console.log(results); // 获得一个Array:['p1', 'p2']
  10. })

可以同时执行多个Promise,在全部完成后调用resolve

5.多个Promise同时调用,返回最快resolve的数据

  1. var p1 = new Promise(fucntion(resolve, reject){
  2. setTimeout(resolve, 500, 'P1');
  3. })
  4. var p2 = new Promise(fucntion(resolve, reject){
  5. setTimeout(resolve, 600, 'P2');
  6. })
  7. // 同时执行p1和p2,并在它们都完成后执行then:
  8. Promise.race([p1,p2]).then(function(result){
  9. console.log(result); // 'P1'
  10. })

https://www.jianshu.com/p/c50cdefaa22f