js中的异步总结
作者:互联网
1 回调函数
回调是一个函数被作为一个参数传递到另一个函数里,在那个函数执行完后再执行。
axios( url , ()=>{ console.log(1111)} )
2 事件监听
当监听事件触发时,调用方法
document.getElementById(“id1”).addEventListener(“click”,function(){console.log(‘id1’);},false);
element.οnclick=function(){
//处理函数
}
3 发布订阅者(观察者模式)
订阅者把自己要处理的事件告诉被订阅者(on回调函数),被订阅者触发时调用每一个事件(emit forEach)
function Hunter(name, level){
this.name = name
this.list = []//待处理事件列表
}
//由被订阅者触发
//
Hunter.prototype.emit = function (money){
this.list.forEach(function(item, index){item(money) })
}
//
//订阅者将自己要处理的事件告诉被订阅者(放入被订阅者待处理事件列表)
Hunter.prototype.on = function (targrt, fn){ targrt.list.push(fn)}
let hunterMing = new Hunter(‘小明’)
let hunterJin = new Hunter(‘小金’)
let hunterPeter = new Hunter(‘Peter’)
hunterMing.on(hunterPeter, function(money){
console.log(money > 200 ? ‘’ : ‘暂时很忙,不能’ + ‘给予帮助’)
})
hunterJin.on(hunterPeter, function(){
console.log(‘小金表示:给予帮助’)
})
hunterPeter.emit(198)
4 promise
Pending----初始状态 Fulfilled----成功 Rejected----失败
promise对象只可改变状态一次(构造 Promise 对象的时候,内部代码是立即执行)
每次调用返回的都是一个新的Promise实例(这就是then可用链式调用以及解决回调地狱的原因)
如果then中返回的是一个结果的话会把这个结果传递下一次then中的成功回调
(1)如果then中出现异常,会走下一个then的失败回调
(2)在 then中使用了return,那么 return 的值会被Promise.resolve()
(3)then中可以不传递参数,如果不传递会透到下一个then中
catch 会捕获到没有捕获的异常
一般用async/await 进行封装
阮一峰老师: async 函数就是 Generator 函数的语法糖。 http://www.ruanyifeng.com/blog/2015/05/async.html
async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。当函数执行的时候,一旦遇到 await 就会先返回,等到触发的异步操作完成,再接着执行函数体内后面的语句。
await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try…catch 代码块中。
标签:总结,异步,函数,订阅,function,Hunter,js,Promise,回调 来源: https://blog.csdn.net/qq_44874811/article/details/116379782