当前播放: 16 | 异步:异步编程之Promise
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:课程简介 (5讲)
01 | 课程介绍
免费
02 | 内容综述
免费
03 | Node.js是什么?
免费
04 | Node.js可以用来做什么?
免费
05 | 课程实战项目介绍
免费
第二章:技术预研篇 (20讲)
06 | 什么是技术预研?
07 | Node.js开发环境安装
08 | 第一个Node.js程序:石头剪刀布游戏
09 | 模块:CommonJS规范
10 | 模块:使用模块规范改造石头剪刀布游戏
11 | 模块:npm
12 | 模块:Node.js内置模块
13 | 异步:非阻塞I/O
14 | 异步:异步编程之callback
15 | 异步:事件循环
16 | 异步:异步编程之Promise
17 | 异步:异步编程之async/await
18 | HTTP:什么是HTTP服务器?
19 | HTTP:简单实现一个HTTP服务器
20 | HTTP:实现网页版石头剪刀布
21 | HTTP:用express优化石头剪刀布游戏
22 | HTTP:用koa优化石头剪刀布游戏
23 | RPC 调用:什么是RPC调用?
24 | RPC调用:Node.js Buffer编解码二进制数据包
25 | RPC 调用:Node.js net建立多路复用的RPC通道
第三章: 项目开发篇 (11讲)
26 | 项目启动:整体需求分析
27 | 项目启动:极客时间App下载页开发
28 | 课程详情页:极客时间详情页需求解构
29 | 课程详情页:将ES6模版字符串改造成模板引擎
30 | 课程详情页:极客时间详情页需求实现
31 | 课程播放页:极客时间播放页需求解构
32 | 课程播放页:GraphQL API服务
33 | 课程播放页:极客时间播放页需求实现
34 | 课程列表页:极客时间列表页需求解构
35 | 课程列表页:用 Vue/React 进行服务端渲染
36 | 课程列表页:极客时间列表页需求实现
第四章:性能调优篇 (10讲)
37 | 性能工具:HTTP服务的性能测试
38 | 性能工具:Node.js性能分析工具
39 | 代码优化:JavaScript代码性能优化
40 | 代码优化:内存管理优化
41 | 代码优化:Node.js C++插件
42 | 多进程优化:Node.js子进程与线程
43 | 多进程优化:Node.js cluster模块实战与源码解读
44 | 多进程优化:进程守护与管理
45 | 架构优化:动静分离
46 | 架构优化:反向代理与缓存服务
第五章:框架和工程化篇 (11讲)
47 | 概念:框架设计和工程化
48 | 概念:设计模式
49 | 概念:Serverless
50 | 服务端框架搭建:koaless
51 | 服务端框架搭建:屏蔽请求细节
52 | 服务端框架搭建:完成服务端框架
53 | 云函数式工程实现:服务端代码
54 | 云函数式工程实现:工具端代码
55 | 加餐:调试 Node.js 源码
56 | 结束语
57 | 彩蛋:这是一个严肃的课程
16 | 异步:异步编程之Promise

16 | 异步:异步编程之Promise

杨浩
腾讯高级工程师
57讲 约600分钟3913
单独订阅¥129
2人成团¥99
3
本节摘要
登录 后留言

精选留言(12)

  • fatty Jack
    老师讲的很好 不枯燥啊

    作者回复: 谢谢,录这段的时候已经有点困了

    2019-10-10
    4
  • L Y L
    老师我想请教下,Promise.all 处理多个错误,视频中说得存下所有变量后处理具体是怎样呢,是在catch中再一个个catch吗?

    作者回复: const result = {};
    let error = null;
    Promise.all([
        promiseA.then(res=> {
            result['A'] = res; return res;
        }).catch(e=> {
            error = e;
        }),
        promiseB.then(res=> {
            result['B'] = res; return res;
        }).catch(e=> {
            error = e;
        })
    ]).then(()=> { xxx })

    像这样写,所有的Promise就会在自己resolve之后把数据存在result里,然后所有的Promise在出错时也会把错误存起来,并且转到resolved状态

    这样子,程序的逻辑就是Promise.all会等待所有的Promise执行完成,并且可以拿到所有Promise各自的结果。而不是“有任意Promise失败就回调。”

    2019-12-02
    1
    3
  • TechCheng
    (function () {
            var promise = new Promise(
                function (resolve, reject) {
                    setTimeout(() => {
                       reject(new Error('3'))//改成这样比较好throw new Error('3')
                    }, 1000)
                }
            ).then((resolve) => {
                console.log(resolve)
            }, (reject) => {
                console.log('reject', reject)
            }).catch((err) => {
                console.log(err)
            })
        })()
    上面的 reject(new Error('3')) 改成这样 throw new Error('3') 应该更好说明『任何任何一个rejected状态且后面没有.catch的Promise,都会造成浏览器/Node环境的全局错误』,不然没有catch,在then中照样可以捕获reject中的异常。

    作者回复: 你提醒我了,then还可以传第二个参数,作用和catch一样。我习惯了then只传一个参数的情况,直接给忘了。

    但是你这样抛错误,promise应该是不会进rejected状态的

    2019-11-03
    1
    2
  • 递归涛
    老师,所以promise.then能根据return和Error判断第二次返回的的promise的状态,这个特点有什么用么

    作者回复: 有时候一个异步流程是由很多个子异步流程组合起来的。比如求职这个例子里整个求职过程是由三次面试组成的。

    这时候你整个求职过程的成功和失败就取决于每一次的成功和失败。而不只是第一个promise

    2019-10-22
    2
    1
  • lstrive
    老师,视频教程还是偏基础是么?因为很多nodejs的内容经常看到,也是基础的内容,接触过node多少已经掌握了一些了,不知道实战会不会又更加硬核的东西~~~😁😁

    作者回复: 计划就是第二章面向初学者。后面会难的

    2019-10-12
    1
  • wine99
    对promise不熟悉的同学,可以看看下面代码的运行结果,反正我刚开始是懵懵的哈哈

    // 在then或catch中手动返回一个Promise

    ;(function () {
        var promise1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('success')
            }, 500)
        })
        var promise2 = promise1.then((res) => {
            return new Promise((resolve, reject) => {
                setTimeout(() => {
                    // resolve('accept')
                    reject(new Error('refuse'))
                }, 500)
            })//.catch(err => { console.log(err.message) })
        })//.catch(err => { console.log(err.message) })
        promise2.catch((err) => { console.log(err.message) })
        // 注意上面两个注释起来的catch也能抓住'refuse',但如果是上面两个抓住的,1200ms的最后输出,promise2就不是reject,而是<resolved>:undefined
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 300)
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 800)
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 1200)
    })()

    // 下面的代码和上面的区别在于promise1的then中不是在return new Promise中setTimeout,而是在setTimeout中return new Promise
    ;(function () {
        var promise1 = new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve('success')
            }, 500)
        })
        var promise2 = promise1.then((res) => {
            setTimeout(() => {
                return new Promise((resolve, reject) => {
                    // resolve('accept')
                    reject(new Error('refuse'))
                })//.catch(err => { console.log(err.message) })
            }, 500)
        })//.catch(err => { console.log(err.message) })
        promise2.catch((err) => { console.log(err.message) })
        // 对于这种情况,只有return new Promise后面紧跟的catch能抓住'refuse'(也就是三个catch中的第一个catch)
        // 并且,无论是resolve('accept')还是reject(new Error('refuse')),500ms后promise2的状态一直都是<resolved>:undefined状态
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 300)
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 800)
        setTimeout(() => {
            console.log(promise1, promise2)
        }, 1200)
    })()
    2019-12-27
  • blabla
    听到老师说困了,我就一下子笑了,大早上的我也是听困了,不过不是老师讲的不好哦,嘿嘿,谢谢,比之前更明了promise的用法了,之前每次用的时候都得纠结好久,试错好几次,,,

    作者回复: 通宵录课容易么

    2019-11-05
  • TechCheng
    『任何一个rejected状态且后面没有.catch的Promise,都会造成浏览器/Node环境的全局错误』
    应该是都有可能会造成全局错误吧???
    2019-11-03
  • Root
    学到了,promise是个渣男!!!以后跟别人解释知道怎么说了。

    作者回复: 也有可能遇到promise了就一定resolve的好男人的(抠鼻)

    2019-10-23
  • 一笑先生
    一直在用,还是知道怎么回事好些,给赞
    2019-10-14
  • Ada.H
    🤓 面试的例子很形象,可算知道怎么使用promise了!
    2019-10-14
  • Mr-L.x.D..☻
    思路清晰、声音好听,老师加油
    ‘promise不只是渣男,还是状态机’瞬间让这节课有趣了起来
    2019-10-14
    1
收起评论
看过的人还看
玩转webpack

程柳锋  腾讯高级工程师,IVWEB团队社区和工程化负责人

84讲 | 5511 人已学习

拼团 ¥79 原价 ¥99
TypeScript开发实战

梁宵  搜狗营销事业部高级架构师

47讲 | 3077 人已学习

拼团 ¥99 原价 ¥129
浏览器工作原理与实践

李兵  前盛大创新院高级研究员

43讲 | 6338 人已学习

拼团 ¥79 原价 ¥99
JavaScript核心原理解析

周爱民  《JavaScript语言精髓与编程实践》作者,南潮科技(Ruff)首席架构师

21讲 | 3697 人已学习

拼团 ¥55 原价 ¥68