Promise-02

Promise(resolve, reject)结合使用

要点:只需要调取一个then,then里面传递两个函数,前者执行调用resolve后处理的代码,后者调用reject后处理的代码

new Promise((resolve, reject) => {
    setTimeout(() => {
      // 先调谁成功会直接return出去,执行对应结果
      // 成功
      // resolve();
      // 失败
      reject();
    }, 2000)
  }).then(() => {
    // 成功时处理代码
    console.log("success");
  }, () => {
    // 失败时处理代码
    console.log("err");
  })

Promise链式调用写法

1.正常写法

new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('aaa');
    }, 2000);
  }).then(res => {
    // 首次先自己处理接收结果
    console.log(res, "第一层处理代码");

    // 二次再增加拼接部分
    return new Promise((resolve, reject) => {
      resolve(res + '111');
    }).then(res => {
      console.log(res, "第二层处理结果");

      // 三次处理
      return new Promise((resolve, reject) => {
        resolve(res + '222');
      }).then(res => {
        console.log(res, "第三层处理结果");
      })
    })
  })

2.省略new,直接调用Promise.resolve/reject

new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('bbb');
    }, 2000)
  }).then(res => {
    console.log(res, "第一次代码处理");
    // 一次return出来处理结果
    return Promise.resolve(res + '111');
  }).then(res => {
    console.log(res, "第二次代码处理");
    // 二次return出来处理结果
    return Promise.resolve(res + '222');
  }).then(res => {
    console.log(res, "第三次代码处理");
    return Promise.reject("请求失败");
  }).catch(err => {
    console.log(err);
  })

3.最简写法,直接return处理结果

new Promise(resolve => {
    setTimeout(() => {
      resolve('ccc');
    }, 2000);
  }).then(res => {
    console.log(res, "第一次");
    // 简写
    return res + '111';
  }).then(res => {
    console.log(res, "第二次");
    return res + '222';
  }).then(res => {
    console.log(res, "第三次");
  })

Promise的all方法

Promise.all([
    // new第一个promise
    new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          name: 'swk',
          age: 18,
          address: 'hgs'
        });
      }, 3000);
    }),

    // new第二个promise
    new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve({
          name: 'zbj',
          age: 19,
          address: 'glz'
        });
      }, 1000);
    })
  ]).then(results => {
    // 第一个请求
    console.log(results[0]);
    // 第二个请求
    console.log(results[1]);

    console.log(results);
  })
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. JS中的异步操作哪些? 定时器settimeout 问:下面打印的结果是? 事件绑定addEventList...
    扶不起的蝌蚪阅读 1,320评论 0 2
  • Promise学习 插图来自 coderwhy,微信 coderwhy001 一、什么是Promise ES6中一...
    waigo阅读 673评论 0 1
  • ES6简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2...
    凌雨微尘阅读 1,118评论 0 3
  • 原本想稍微整理一下 ES 新特性,没想到花了相当多的时间,本文也巨长,依然推荐使用 简悦[https://gith...
    401阅读 1,912评论 0 5
  • 什么叫promise? 那我们为什么要使用promise? 比如我们在工作中经常会碰到这么一个需求,比如我使用aj...
    紫陌兰溪阅读 14,697评论 2 5