Promise学习笔记
Promise.resolve(p1) //无论参数如何 都是成功 返回值为参数类型(promise或具体的值)
Promise.reject(p1) //无论参数如何 都是失败 返回值为参数类型(promise或具体的值)
Promise.all([p1,p2,p3]) //如果数组中全为成功 则返回数组 如果为失败 则返回失败的那个数组参数 Promise.race([p1,p2,p3]) //数组中 谁先回调函数 则返回对应的数组参数(无论成败)
Promise状态修改
resolve(参数) pending->fulfilled/resolved reject(参数) pending->rejected throw '出问题了' pending->rejected
primise注意事项
为一个promise函数指定多个回调(失败/成功) 当状态改变时都会调用 如果是未定义的pending状态则不调用 改变状态与指定回调的先后问题 如果是同步任务 就是 状态和执行回调同步执行 如果是异步任务 就是 改变状态后再执行回调
then中执行的是异步回调 要先等同步回调完成后再处理 then方法返回的是一个promise对象 该promise对象的数据作为该then的返回数据 链式串联多个任务: 前提 都得是成功的情况下 上一个then中的return 如果是一个promise 则该promise的值 作为下一个then的value值 如果没有return 则下一个then的value值是undefined
p.then(value=>{ return new Promise((resolve,reject)=>{ resolve('ok') }) }).then(value=>{ console.log(value) //这个value是ok }).then(value=>{ console.log(value) //这个value是undefined })
异常穿透
当使用promise的then链式调用时,可以在最后指定失败的回调catch 如果前面任何操作出现失败 都会传到最后失败的回调中处理
p.then(value=>{ return new Promise((resolve,reject)=>{ reject('err') }) }).then(value=>{ console.log(value) //这个value是ok }).then(value=>{ console.log(value) //这个value是undefined }).catch(reason=>{ console.warn('在最后的catch中处理失败'+reason) })
异步函数中不要定义错误reject 比如定时器 否则会报错
async和await
async 函数的返回值是promise对象 promise对象的结果由async函数执行的返回值决定
await右侧的表达式一般为promise对象 1、如果是promise对象,await返回的是promise成功的值 2、如果是其他,直接将此值作为await的返回值
await必须在async函数中 async可以没有await 如果await的promise失败了 则抛出异常 相应try...catch进行捕获
/----------------------------------------------------------------------/ util包中的promisify() 可以将api转化为promise型的函数 比如promisify(fs.readFile)
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号