Node.js 开发实战
杨浩
腾讯高级工程师
37442 人已学习
新⼈⾸单¥68
课程目录
已完结/共 57 讲
第一章:课程简介 (5讲)
Node.js 开发实战
登录|注册
留言
33
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 16 | 异步:异步编程之Promise
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 课程介绍
02 | 内容综述
03 | Node.js是什么?
04 | Node.js可以用来做什么?
05 | 课程实战项目介绍
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通道
26 | 项目启动:整体需求分析
27 | 项目启动:极客时间App下载页开发
28 | 课程详情页:极客时间详情页需求解构
29 | 课程详情页:将ES6模版字符串改造成模板引擎
30 | 课程详情页:极客时间详情页需求实现
31 | 课程播放页:极客时间播放页需求解构
32 | 课程播放页:GraphQL API服务
33 | 课程播放页:极客时间播放页需求实现
34 | 课程列表页:极客时间列表页需求解构
35 | 课程列表页:用 Vue/React 进行服务端渲染
36 | 课程列表页:极客时间列表页需求实现
37 | 性能工具:HTTP服务的性能测试
38 | 性能工具:Node.js性能分析工具
39 | 代码优化:JavaScript代码性能优化
40 | 代码优化:内存管理优化
41 | 代码优化:Node.js C++插件
42 | 多进程优化:Node.js子进程与线程
43 | 多进程优化:Node.js cluster模块实战与源码解读
44 | 多进程优化:进程守护与管理
45 | 架构优化:动静分离
46 | 架构优化:反向代理与缓存服务
47 | 概念:框架设计和工程化
48 | 概念:设计模式
49 | 概念:Serverless
50 | 服务端框架搭建:koaless
51 | 服务端框架搭建:屏蔽请求细节
52 | 服务端框架搭建:完成服务端框架
53 | 云函数式工程实现:服务端代码
54 | 云函数式工程实现:工具端代码
55 | 加餐:调试 Node.js 源码
56 | 结课测试&结束语
57 | 彩蛋:这是一个严肃的课程
本节摘要
登录 后留言

全部留言(33)

  • 最新
  • 精选
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
4
15
fatty Jack
老师讲的很好 不枯燥啊

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

2019-10-10
13
WinfyHo
老师,为什么rejected状态的promise会回调后面第一个 .catch。多个链式promise是怎么实现调用到第一个catch的,对其中的原理有点迷惑

作者回复: 我试试这样表述: 1. 仅当Promise是resolved状态时,.then才会执行那个传入的函数。仅当Promise是rejected状态时,.catch才会执行那个传入的函数。 2. 若传入Promise.then和Promise.catch的函数被执行,会返回一个新的Promise。若不执行,直接返回这个Promise本身。 然后你把链式调用的每一次then和catch分开来理解,可能就会比较容易了。

2020-04-13
2
5
blabla
听到老师说困了,我就一下子笑了,大早上的我也是听困了,不过不是老师讲的不好哦,嘿嘿,谢谢,比之前更明了promise的用法了,之前每次用的时候都得纠结好久,试错好几次,,,

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

2019-11-05
4
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
5
3
blulu
老师,Promise.all(ajax)当真是并行请求吗?我一直理解是假并行.真无序逐个去请求。

作者回复: 发起请求还是串行的,毕竟node是单线程执行。 但等待请求的过程是并行的,

2020-03-19
2
2
Root
学到了,promise是个渣男!!!以后跟别人解释知道怎么说了。

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

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

作者回复: 有时候一个异步流程是由很多个子异步流程组合起来的。比如求职这个例子里整个求职过程是由三次面试组成的。 这时候你整个求职过程的成功和失败就取决于每一次的成功和失败。而不只是第一个promise

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

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

2019-10-12
1
一枚小浪子
老师我请教一下: (function () { const promise = interview(); const promise2 = promise.then((res) => { return new Promise(function (resolve, reject) { setTimeout(() => { resolve("accept"); }, 100); }); }); setTimeout(() => { console.log(promise); console.log(promise2); }, 700); function interview() { return new Promise((resolve, reject) => { setTimeout(() => { if (Math.random() > 0) { resolve("success"); // 约定第一参数为 error } else { reject(new Error("fail")); } }, 500); }); } })(); 按照我理解,promise2 应该是在 500 + 100 即 600ms 后可以获取到状态,可是我这边运行后依然是 pendding。 如上代码中所示,我需要改到 800ms 才能获取到 promise2 的状态。 这是为啥呢?是不是我代码有问题?

作者回复: 我这边运行的结果和你预期是一致的。 极端点的猜想就是你500ms的那个延迟实际上延迟了不止500,而是超过了700,这样的话就会出现你看到的结果。可能是你电脑那时候太卡了? 因为setTimeout本身就具备不确定性,所以拿500 600 700这种数字来代表顺序本来就不严谨,只是课程里会用这种简单的方式处理。

2021-01-27
收起评论