异步与Promise

105 阅读1分钟

1.异步——不能直接拿到结果

2.同步——能直接拿到结果

3.回调——写一个函数被别人调用

4.异步与回调关系:

关联:
异步任务需要在得到结果时通知JS来拿结果,可以让JS留一个函数地址给浏览器,异步任务完成时浏览器调用该函数的地址,同时把结果作为参数传给该函数。这个函数就是写来给浏览器调用的(回调函数)
区别:
异步任务需要用到回调函数来通知结果,但回调函数不一定只用在异步任务里,回调可以用到同步函数李

判断异步函数

1.setTimeout
2.AJAX
3.AddEventListener

异步任务若有两个结果成功或失败

1.回调接受两个参数
2.搞两个回调

这两个方法有不足:
1.名称不规范
2.容易出现回调地狱

getUser(user=>{
  getGroups(user,(groups)=>{
    g.filter(x=>x.ownerId===user.id)
      .forEach(x=>console.log(x))
     }) 
    })
  })

3.很难进行错误处理

解决回调问题——1976年出现Promise思想

封装ajax

image.png 改用Promise写法

image.png

image.png

Promise简单的使用

1.

return new Promise((resolve,reject)=>{...})
任务成功则调用resolve(result)
任务失败则调用reject(error)
resolve和reject会再去调用成功和失败函数

2

使用.then(success,fail)传入成功和失败函数