js异步递归方式
写下自己的思考是个好习惯,可以总结自己的学习和智慧,巩固知识,也可以让自己不犯同样错误。希望自己可以坚持下来。
问题
递归就是自己调用自己,然后通过调用自己得到的结果来计算当前结果
斐波那契数列的递归计算方式就是一种典型的例子
function feb (n) {
if (n == 1 || n == 2) return 1
return feb(n - 2) + feb(n - 1)
}
这里有一个重要的地方在于:要得到调用自己的结果
那么自己是一个异步函数,就会出现得不到自己的结果这种情况
因为异步函数会在同步代码执行完之后执行
也就是说,递归不起来了
解决方法
js 提供了 Promise
类,可以解决这个问题
假设我们要通过 fs.readdir()
这个异步方法来递归读取某个路径下的所有文件名
我们可以先通过 Promise
把 fs.readdir()
这个异步方法封装起来
new Promise((resolve, reject) => {
fs.readdir(path, 'utf-8', function (err, data) {
if