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

Promise 入门

Meathill Web前端工程师
难度中级
时长 2小时 0分
学习人数
综合评分8.87
73人评价 查看评价
9.1 内容实用
8.9 简洁易懂
8.6 逻辑清晰
  • 比如 var a=xxx.方法(参数,function(a,b){

        var xxx=xxx; 全局变量

        function(){xxxxxxx}   

        // 这里 可以跳出 这个 回调 在对数据作处理 就不会出现 数据脏问题


    })


    1. 容易进入回调地狱 难以维护

    2. 异步函数 和回调函数 不在一个栈里 异步函数不能监听到 回调抛出的try 问题 所以只能return callback  而嵌套太深 无法正确return

    3. 一个异步函数 的回调函数可能会在里面生成一个全局变量 做操作 ,如果异步函数做的操作过多,可能会导致全局变量变脏

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


    查看全部
  • 一、错误处理

    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);
      })


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

    2018-07-09

  • .then()

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

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

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

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

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


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

    2018-07-09

  • <table><tbody><tr class="firstRow"><td><br /></td><td>console.log('here we go');<br /></td></tr><tr><td><br /></td><td>new Promise(resolve =&gt; {</td></tr><tr><td><br /></td><td>setTimeout( () =&gt; {</td></tr><tr><td><br /></td><td>resolve('hello');</td></tr><tr><td><br /></td><td>}, 2000);</td></tr><tr><td><br /></td><td>})</td></tr><tr><td><br /></td><td>.then( value =&gt; {</td></tr><tr><td><br /></td><td>console.log(value);</td></tr><tr><td><br /></td><td>console.log('everyone');</td></tr><tr><td><br /></td><td>(function () {</td></tr><tr><td><br /></td><td>return new Promise(resolve =&gt; {</td></tr><tr><td><br /></td><td>setTimeout(() =&gt; {</td></tr><tr><td><br /></td><td>console.log('Mr.Laurence');</td></tr><tr><td><br /></td><td>resolve('Merry Xmas');</td></tr><tr><td><br /></td><td>}, 2000);</td></tr><tr><td><br /></td><td>});</td></tr><tr><td><br /></td><td>}());</td></tr><tr><td><br /></td><td>return false;</td></tr><tr><td><br /></td><td>})</td></tr><tr><td><br /></td><td>.then( value =&gt; {</td></tr><tr><td><br /></td><td>console.log(value + ' world');</td></tr><tr><td><br /></td><td>});</td></tr></tbody></table><pre class="brush:js;toolbar:false"><br /></pre><p><br /></p>
    查看全部
  • 区分4种Promise的区别

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

    2018-07-03

  • 如果在一个then里面不直接返回一个promise对象,会继续执行

    查看全部
  • 每一个then都会返回一个新的promise事例

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

    2018-06-29

  • 如果上一个promise没有返回值,那么在.then中就是undefined

    查看全部
  • 陷阱,如果不直接return,而是放在立即执行函数中,那么立即执行函数中的内容,会被延后执行。

    查看全部
  • 在异步回调的操作当中,我们没有办法正常的去使用try,catch

    查看全部
  • 不在一个栈里,所以需要使用return将错误返回。

    查看全部
  • <table><tbody><tr class="firstRow"><td>console.log('here we go');</td><td><br /></td></tr><tr><td><br /></td><td>new Promise(resolve =&gt; {</td></tr><tr><td><br /></td><td>setTimeout( () =&gt; {</td></tr><tr><td><br /></td><td>resolve('hello');</td></tr><tr><td><br /></td><td>}, 2000);</td></tr><tr><td><br /></td><td>})</td></tr><tr><td><br /></td><td>.then( value =&gt; {</td></tr><tr><td><br /></td><td>console.log(value);</td></tr><tr><td><br /></td><td>console.log('everyone');</td></tr><tr><td><br /></td><td>(function () {</td></tr><tr><td><br /></td><td>return new Promise(resolve =&gt; {</td></tr><tr><td><br /></td><td>setTimeout(() =&gt; {</td></tr><tr><td><br /></td><td>console.log('Mr.Laurence');</td></tr><tr><td><br /></td><td>resolve('Merry Xmas');</td></tr><tr><td><br /></td><td>}, 2000);</td></tr><tr><td><br /></td><td>});</td></tr><tr><td><br /></td><td>}());</td></tr><tr><td><br /></td><td>return false;</td></tr><tr><td><br /></td><td>})</td></tr><tr><td><br /></td><td>.then( value =&gt; {</td></tr><tr><td><br /></td><td>console.log(value + ' world');</td></tr><tr><td><br /></td><td>});</td></tr></tbody></table><p>then中不返回promise时,下一个then会立即执行</p><p><br /></p>
    查看全部
  • console.log("start");                                                                               

    let promise=new Promise(resolve=>{

    setTimeout(()=>{

    console.log("the promise fulfilled");

     resolve("hello world"); 

    },3000);     

    promise队列的重要特性,在任何地方生成了一个promise队列之后,我们可以把它作为一个变量传递到其他地方,如果我们的操作是队列的状态,即先进先出的状态,就可以在后面追加任意多的then,不管之前的队列是完成还是没有完成,队列都会按照顺序完成。

    查看全部
  • 7 行 new Promise会立即执行.

    查看全部
  • promise()  raduce队列

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

    2018-06-13

举报

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

微信扫码,参与3人拼团

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

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