callback
call Stack调用栈
nodejs的每个事件循环,都是调用栈
setTimeout里面的错误,是不会被外面的 try catch所捕获的
callback 毁掉地狱
function success(res) {if( res instance Error) {console.log('error');return}}function fn(callback) {setTimeout(() => {if(Matho.random > 0.8) {callback('success')}else {callback(throw new Error('error'))}})}
nodejs, error规范
- 第一个参数都是错误,
- 后面的参数才是结果
Promise


function fn() {return new Promise((resolve, reject) => {setTimeout(() => {if(Matho.random > 0.8) {resolve('success')}else {reject(new Error('error'))}})})}const promise = fn()promise.then(res => {console.log(res)}).catch(err => {console.log('err', err)})
then会返回一个全新的 promise
- 如果 then,或 catch里面 throw new Error,那么就是 reject状态
- 如果 return 正常值,就是 resolve状态

async&await
async function 是 Promise 的语法糖封装
异步编程的终极方案 – 以同步的方式写异步
async function() {return 100}// 等价于function() {return new Promise(resolve => resolve(100))}
await
await会等待后面的 Promise执行完成,才执行下面的
await 可以捕获 Promise的错误
async function() {try {await Promise.all([])} catch(e) {return console.log('error', error)}}
