首页 > 编程知识 正文

异步javascript递归,js递归理解

时间:2023-12-29 20:32:07 阅读:331216 作者:EELL

本文目录一览:

js中for循环中需要调用异步方法,怎么确保执行的顺序

既然是异步,就不可能用for循环,

因为for循环体中是没有办法暂停等待异步调用的。

应该用函数递归的方式循环

如何优雅的处理Nodejs中的异步回调

Nodejs最大的亮点就在于事件驱动, 非阻塞I/O 模型,这使得Nodejs具有很强的并发处理能力,非常适合编写网络应用。在Nodejs中大部分的I/O操作几乎都是异步的,也就是我们处理I/O的操作结果基本上都需要在回调函数中处理,比如下面的这个读取文件内容的函数:

fs.readFile('/etc/passwd', function (err, data) {  if (err) throw err;

console.log(data);

});

那,我们读取两个文件,将这两个文件的内容合并到一起处理怎么办呢?大多数接触js不久的人可能会这么干:

fs.readFile('/etc/passwd', function (err, data) {  if (err) throw err;

fs.readFile('/etc/passwd2', function (err, data2) {    if (err) throw err;    // 在这里处理data和data2的数据  });

});

那要是处理多个类似的场景,岂不是回调函数一层层的嵌套啊,这就是大家常说的回调金字塔或回调地狱()的问题,也是让js小白最为头疼的问题。

这种层层嵌套的代码给开发带来了很多问题,主要体现在:

代码可能性变差

调试困难

出现异常后难以排查

本文主要是介绍如何优雅的处理以上异步回调问题。

初级方案:通过递归处理异步回调

我们可以使用递归作为代码的执行控制工具。把需要执行的操作封装到一个函数中,在回调函数中通过递归调用控制代码的执行流程,废话不多说,上个代码吧:

var fs = require('fs');// 要处理的文件列表var files = ['file1', 'file2', 'file3'];function parseFile () {  if (files.length == 0) {    return;

 }  var file = files.shift();

 fs.readFile(file, function (err, data) {    // 这里处理文件数据

   parseFile();  // 处理完毕后,通过递归调用处理下一个文件  });

}// 开始处理parseFile();

以上代码已依次处理数组中的文件为例,介绍了通过递归的方式控制代码的执行流程。

应用到一些简单的场景中还是不错的,比如:我们将一个数组中的数据,依次保存到数据库中就可以采用这种方式。

通过递归的方式可以解决一些简单的异步回调问题。不过对于处理复杂的异步回调还是显得有些无能为力(如需要同步多个异步操作的结果)。

js image对象的onload是异步还是同步

异步。你可以创建多个image对象,在控制台看。它们是一起在加载。不会等上一个加载完了再加载下一个。如果你想等上一个加载完再加载下一个,可以使用递归的方式进行加载。

JS递归的常见用法

求 1-100 的和

1,1,2,3,5,8,13,21,34,55,89...求第 n 项

JS 递归 假如楼梯有 n 个台阶,每次可以走 1 个或 2 个台阶,请问走完这 n 个台阶有几种走法

原理: clone(o) = new Object; 返回一个对象

1、很多时候可以用递归代替循环,可以理解为递归是一种特殊的循环,但通常情况下不推荐这样做。

2、递归一般是在函数里面把函数自己给调用一遍,通过每次调用改变条件,来结束循环。

3、递归在数据格式一致,在数据层级未知的情况下,比普通的遍历更有优势。

4、递归在异步的时候,更容易理解,且更容易实现,因为可以在异步的回调里面,调用自己来实现每次都能拿到异步的结果再进行其他操作。

5、递归实现的快速排序比普通遍历实现的排序效率更好。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。