promise和async原理

2021-05-07  本文已影响0人  tanjinrong123

const aa= async (params, isDetails) => {  

  const { data } = await request.post({xx})

  return data

}

 aa是一个async函数,返回的总是一个promise实例,而不是data

1. 没有显式return,相当于return Promise.resolve(undefined);

2. return非Promise的数据data,相当于return Promise.resolve(data);

3. return Promise, 会得到Promise对象本身

下图为aa函数调用的返回结果:

data在primseResult里面。aa.then((res)=<{

   //这个res就是data

})

Promise是一个构造函数,new Promise()时,接受一个函数作为参数,且这个函数有两个参数,分别是resolve,reject。 而resolve和 reject也是两个函数。在生成实例的时候,里面的函数会立即执行

每一个被实例化出来的promise实例,都有.then() 和 .catch() 两个方法。且这两个方法的调用支持链式操作

then和catch方法是添加在Promise的原型上的。即Promise.prototype.then(), 故所有Promise实例都存在.then()和catch方法

.then((res)=>{},(err)=>{}) 第一个是resolve回调函数,第二个是reject函数。res和err是上次回调的返回值

1、.then((res)=>{      没有返回值,则默认return undefined 。该resolve函数会返回一个默认的promise对象,状态为resolved,走到下面的.then

},(err)=>{

})

2、.then((res)=>{      //返回一个常量。该resolve函数会返回一个默认的promise对象,状态为resolved,走到下面的.then

return 123

},(err)=>{

})

3、.then((res)=>{

return new Promise(

(resolve, reject) => { resolve('456') })   //返回的是定义好的promise,则返回的状态为这个promise的状态,成功则走.then,失败走.catch

},(err)=>{

})

上一篇下一篇

猜你喜欢

热点阅读