异步
异步 简单来说就是一个任务分为多段,先执行第一段,在等待响应的时候首先执行其他的任务,等第一段的相应来了,做好准备了,就执行第二段。可见第一段与第二段的执行之间是可以插入其他任务的。
同步 就不可以插入其他任务,是连续执行的。
回调函数地狱
一般来说,回调函数作为其他函数的一个参数,等待其他函数执行完毕后,会自动调用回调函数。
当一个任务需要分多段执行(比如一次性依次读取五六个文件)时,就会出现一个回调函数内嵌套着另一个回调函数,多个异步操作形成强耦合,当一个操作需要修改时,他的上层函数和下层函数都需要跟着修改,就形成了回调地狱,让代码乱成一团。
Promise
promise是为了解决回调函数地狱而提出的,是一种新的写法,不是一种新的语法,他允许将回调函数的嵌套变更为链式调用。
例:
let readFile = require('fs-readfile-promise') // 返回一个promise对象
readFile(fileA)
.then(function (data) {
console.log(data.toString())
})
.then(function () {
return readFile(fileB)
})
.then(function (data) {
console.log(data.toString())
})
.catch((err) => {
console.log(err)
})