JavaScript同步--Promise

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){
       resolve(1);
      }else{
        reject("错误");
      }
  }

  var testPromise = new Promise(test);

  testPromise.then(testSuccess).catch(testError);

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

3. 多个Promise连环调用

  function anotherPromise(val){
    return new Promise(function(resolve,reject){
             resolve(++val);
      })
  }

  var testPromise = new Promise(test);
  testPromise.then(anotherPromise).then(anotherPromise).then(testSuccess).catch(testError);

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

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

   var p1 = new Promise(function (resolve, reject) {
    setTimeout(resolve, 500, 'P1');
  });
  var p2 = new Promise(function (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(function (resolve, reject) {
      setTimeout(resolve, 500, 'P1');
  });
   var p2 = new Promise(function (resolve, reject) {
      setTimeout(resolve, 600, 'P2');
   });
   Promise.race([p1, p2]).then(function (result) {
      console.log(result); // 'P1'
   });
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容