JavaScript异步编程中,解决回调地狱的两种方式
众所周知,在ES6推出之前,要想执行一串有前后依赖关系的异步操作需要通过纯回调函数的方式,即把外层的函数所得到的结果作为参数传入到下一层函数, 试着看这样一个例子:
案例
根目录下有一个index.js脚本(也就是我们要编写读取文件的脚本),要读取 /files 文件夹里的三个json文件,分别为:
a.json
{
"next" : "b.json",
"msg": "this is a"
}
b.json
{
"next" : "b.json",
"msg": "this is a"
}
c.json
{
"next" : "null",
"msg": "this is a"
}
可以看出这三个文件之间有着链式的关系,a.json的next属性指向b.json,同样b.json的next属性指向c.json,要异步读取这三个文件,我们可以采用下面这种方式:
千层饼回调地狱
//方案一 回调地狱读取文件
function getFileContent(filename, successCallback, errorCallback) {
const fullName = path.resolve(__dirname, 'files', filename)
fs.readFile(fullName, (err, data) => {
if (err) {
//把异常抛出给errorCallback回调函数
errorCallback(err)
return
}
successCallback(JSON.parse(data.toString())