老生常谈promise 对于promise大部分人应该不陌生了,他是ES6的新特性之一,若是你是一个追求潮流的coder那么你应该用过axios请求方式,这个向后台发送请求的方式就用到了promise 我接触promise是一年前,部门的程序员会轮流培训,恰好当时我在看一些关于axios的东西,就准备培训一些关于promise的知识,因此我就找了不少关于promise的博客,看的也是云里雾里,可想而知培训的效果也不是很好ios
promise很火,能够说是程序员居家旅行必备的技能之一了,因此说对于这样的东西,咱们最好仍是吃透它,这样才不会在代码当中迷失。程序员
大多数人开发的过程当中应该都会遇到一些异步的问题,好比咱们必须等请求接口返回数据后才去作另一些事情,咱们都是经过回调函数来作 大部分好的状况是只须要等待一个异步的结果就能够去作一些事情,那么极端的状况是不一样的异步嵌套,让咱们的代码看上去就像一个金字塔,一层层的异步嵌套让咱们头皮发麻,这种状况被咱们称为回调地狱编程
fs.readFile('./sample.txt', 'utf-8', (err, content) => {
let keyword = content.substring(0, 5);
db.find(`select * from sample where kw = ${keyword}`, (err, res) => {
get(`/sampleget?count=${res.length}`, data => {
console.log(data);
});
});
});
复制代码
promise就能够解决这些问题,可让咱们的代码跟优雅更具备可读性,给promise下个定义axios
promise是异步编程的一种解决方案,比回调函数更何理更强大promise
咱们从使用层面上再来定义如下promise浏览器
#####同步和异步 你们都知道同步和异步,可是让你给他下个定义你知道吗?bash
通常而言,操做分为两种发出调用和获得结果,发出调用当即获得结果为同步,发出调用,没法当即获得结果,须要一些额外的操做才能获得预期的结果为异步。同步是在发出调用后一直等待程序是阻塞状态,异步发出调用后程序能够继续执行dom
dom.addEventListener(type,callback)
$(dom).on(type,callback)
复制代码
new Promise((resolve,reject)=>{
//此处执行一段异步代码 (这个部分被称为执行器)
//异步处理有结果以后执行对应的
resolve() //操做成功调用此回调,把promise的实例状态改为fullfilled
reject() //操做失败调用此回调,把promise的实例状态改为rejected
}).then((res,rej) => {
})
复制代码
在then函数里返回一个新的promise,then支持两个参数,分别对应上一个promise实例的两个回调 then能够链式的调用,当前面一个promise的状态改变时,后面的then会根据前面一个promise的状态执行对应状态的回调 (这个地方有一个坑 由于须要手动return) 异步
promise是一个代理对象,它和原先的操做并未关系,咱们只须要把原先的操做放入执行器里 它经过一个回调函数,而后把其它的回调所有基于此回调函数异步编程