为了账号安全,请及时绑定邮箱和手机立即绑定

Promise 入门

Meathill Web前端工程师
难度中级
时长 2小时 0分
学习人数
综合评分8.87
73人评价 查看评价
9.1 内容实用
8.9 简洁易懂
8.6 逻辑清晰
  • 一、错误处理

    1、promise会自动捕获内部异常,并交给rejected响应函数处理。

    2、promise试图在现有的语言框架中解决异步回调带来的问题。在栈的语言基层运行池相关的问题就无法处理了,我们能捕获到的是异步完成回调之后的这部分栈信息,仍然无法确定是哪里导致的错误。

    3、promise执行器如果发生错误,执行器状态就会被置为rejected,fulfilled状态就不会被执行。

    二、错误处理的2中做法

    1、reject(‘错误信息’).then(null, message => {});

    2、throw new Error(‘错误信息’).catch(message => {});

    推荐使用第二种,更加清晰好读,并且可以捕获前面的错误。

    new Promise(resolve => {
      setTimeout(() => {
        throw new Error('bye');
      }, 1000);
    })
      .then(value => {
        console.log(value + 'world');
      })
      .catch(error => { // 整体捕获错误的方法,可以捕获promise的错误,也可以捕获then中的错误
        console.log('Error:', error.message);
      })


    查看全部
    3 采集 收起 来源:错误处理

    2018-07-25

  • Promise是什么

    主要用于异步计算

    可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。

    可以在对象之间传递和操作Promise,帮助我们处理队列

    查看全部
    2 采集 收起 来源:Promise 释义

    2019-01-04

  • js 检查表单而生,操作DOM,异步操作能够避免窗格冻结,

    从观察者角度来看:AB工作完成顺序与交付他们的时间顺序无关,故为异步。

    事件的侦听与响应,回调函数,ajax代码

    node.js 无阻塞和高并发,异步操作是其保障,大量操作依赖回调函数

    查看全部
  • .then()

    1、.then()接受两个函数作为参数,分别代表fulfilled和rejected。

    2、.then()返回一个新的promise实例,所以它可以链式调用。

    3、当前面的promise状态改变时,.then()根据其最终状态,选择特定的状态响应函数执行。

    4、状态响应函数可以返回新的promise,或其他值,或不返回值。

    5、如果返回新的promise,那么下一级.then()会在新promise状态改变之后执行。


    查看全部
    2 采集 收起 来源:引出 .then()

    2018-07-25

  • 一、javascript

    1、javascript为检查表单而生。

    2、创造它的首要目标是操作dom。

    3、javascript的操作大多是异步的。

    二、浏览器中的javascript

    1、异步操作以事件为主。

    2、回调主要出现在ajax和file api

    三、node.js

    1、无阻塞高并发,是Node.js的招牌。

    2、异步操作是其保障。

    3、大量操作依赖回调函数。


    查看全部
  • 回调地狱图例

    查看全部
  • 回调有四个问题:

    嵌套层次很深,难以维护;

    无法正常使用return和throw

    无法正常检索堆栈信息

    多个回调之间难以建立联系


    查看全部
  • 回调有四个问题:

    嵌套层次很深,难以维护;

    无法正常使用return和throw

    无法正常检索堆栈信息

    多个回调之间难以建立联系

    查看全部
  • Promise有3个状态:

    1. pending[待定] 初始状态

    2. fulfilled[实现] 操作成功

    3. rejected[被否决] 操作失败

      当Promise状态发生改变,就会触发.then()里的响应函数处理后续步骤。

      Promise状态一经改变,就不会再变。

    查看全部
    1 采集 收起 来源:Promise 简介

    2018-12-08

  • https://img1.sycdn.imooc.com//5c093c5c000129de18340978.jpg

    问1: then 中 返回Promise

    https://img1.sycdn.imooc.com//5c093c5a000168f716480844.jpg问2: then 中 没有返回Promise

    https://img1.sycdn.imooc.com//5c093c57000158eb16360830.jpg

    问3: then 中 第一个参数是Promise

    https://img1.sycdn.imooc.com//5c093c5f0001036616760766.jpg问4: then 中 第一个参数是一个函数

    https://img1.sycdn.imooc.com//5c093c5e0001258d16580790.jpg


    查看全部
    1 采集 收起 来源:随堂小测试

    2018-12-06

  • primose 流程详解图

    查看全部
    1 采集 收起 来源:Promise 简介

    2018-11-25

  • console.log('go')
    Promise.all([1,2,3])
    .then(all => {
    console.log('1: ', all)//注意正确写法,console一个字符串一个数组,而不需要+号将二者连城字符串
    return Promise.all([()=>{
    console.log('oooo')//这里,因为三个参数都是非promise且非thenable的。all会默认执行promise.resolve将其转为promise状态,且resolved状态。而这个函数也只是数组第零项,如果不调用,里边的console也不会执行
    }, '0000', false]);
    })
    .then(all =>{
    console.log('2: ', all)
    // 这里原先写错为console.log('2: '+all),
    // 最后输出的是
    /* 2: ()=>{
       console.log('oooo')//这里,默认执行promise.resolve时,console是否执行?
     },0000,false */
    // 这么一个字符串了
    let p1 = new Promise(resolve=>{
    setTimeout(()=>{
    resolve('i,am p1');
    },1000)
    })
    let p2 = new Promise(resolve=>{
    setTimeout(()=>{
    resolve('i,m p2')
    }, 2000)
    })
    let p3 = new Promise((resolve,reject)=>{
    setTimeout(()=>{
    reject('i,m p3')
    }, 3000)
    })
    return Promise.all([p1,p2,p3]);
    })
    .then(all=>{
    console.log('end all:' + all)
    })
    .catch(err=>{console.log('Error: '+err)})
    // 自测答案
    // 立即执行
    // go
    // 1: [1,2,3]
    // * return [()=>{console.log('oooo')}, '0000', false]
    // 2: [()=>{console.log('oooo')}, '0000', false]
    // 3秒后
    // * return reject 'i,m p3'//(因为p1,p2,p3三个promise实例,在all中,因为p3是reject状态,all遇到后立马返回该reject状态和值)
    // console err i,m p3


    查看全部
    1 采集 收起 来源:Promise.all

    2018-10-11

  • then 里不返回 promise,而是返回 false, 结果:因为 then 没有返回 promise 实例,所以后面的函数先执行了。https://img1.sycdn.imooc.com//5b6d73a1000167ec03470435.jpghttps://img1.sycdn.imooc.com//5b6d73bb00014dfe03020115.jpg

    查看全部
  • 一、promise.resolve()

    1、返回一个fulfilled的promise实例,或原始promise实例。

    (1)参数为空,返回一个状态为fulfilled的promise实例

    (2)参数是一个跟promise无关的值,同上,不过fulfilled响应函数会得到这个参数。

    (3)参数为promise实例,则返回该实例,不做任何修改。

    (4)参数为thenable,立刻执行它的.then()函数


    查看全部
    1 采集 收起 来源:Promise.resolve

    2018-07-25

  • 一、实现队列

    1、forEach()

    (1)

    function queue(things) {
      let promise = Promise.resolve();
      things.forEach(thing => {
        promise = promise.then(() => {
          return new Promise(resolve => {
            doThing(thing, () => {
              resolve();
            });
          });
        });
      });
      return promise;
    }
    queue(['lots', 'of', 'things', ....]);

    (2)常见错误:没有把.then()产生的新的promise实例赋给then,没有生成队列。

    2、reduce(),数组的一端遍历到另一端。

    (1)

    function queue(things) {
      return things.reduce((promise, things) => {
        return promise.then(() => {
          return new Promise(resolve => {
            doThing(thing, () => {
              resolve();
            });
          });
        });
      }), Promise.resolve();
    }
    queue(['lots', 'of', 'things', ....]);

    (2)常见错误:Promise实例创建之后,会立刻执行执行器代码,所以这个也无法达成队列的效果。


    查看全部
    1 采集 收起 来源:实现队列

    2018-07-25

首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
1. 前端水平:初级、中级 2. 了解 JavaScript 3. 最好有异步开发经历,希望写出更好的代码
老师告诉你能学到什么?
1. Promise 的基础用法 2. Promise 容易出错的地方 3. Promise 怎么处理错误(Error) 4. Promise 的其它用法 5. 简单介绍异步函数

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!