gpt4 book ai didi

javascript - Node.js:杂耍异步(learnyounode)。回调函数中的递归未按预期工作

转载 作者:行者123 更新时间:2023-12-03 01:47:57 25 4
gpt4 key购买 nike

所以我正在解决这个名为杂耍异步learnyounode练习,它基本上给了我3个URL并要求我按照URL输入的顺序输出URL内容。

我想出了一个递归解决方案,其中一个回调调用另一个回调,同时维护退出计数器num。然而,当我运行这个程序时,无论输入什么,我都会在控制台上看到空行。

这是短代码:

var url = ["", process.argv[2], process.argv[3], process.argv[4]];
var http = require('http');
var str = ["", "", "", ""];

var cnt = 1;

function dos(num, callback)
{
if(num == 4)
return;
http.get(url[num], function (response1){
// console.log(num);
response1.setEncoding('utf8');
response1.on('data', function(data1) {
str[num] = data1;
callback(num + 1, dos);

})
});
}

dos(1, dos);
console.log(str[1]);
console.log(str[2]);
console.log(str[3]);

现在,这是我第一次使用回调函数实现递归。我两天前刚刚学习了回调函数,这可能意味着这里有一些我看不到的明显错误。请帮我看看。谢谢。

最佳答案

查看执行顺序。

  1. 您定义 dos 函数
  2. 您调用 dos 函数
  3. 您调用console.log

您的代码的问题是 http.get 方法的异步性质。

dos 的定义中,每当调用 http.get 时,都会附加一个回调,并且在该控制流之后存在函数作用域。控制流没有停止并等待 get 调用完成。

它退出函数作用域并转到调用 console.log,因此您会得到空白字符串,因为这就是您的数组当时包含的内容。

为了您达到预期的结果。

在函数调用中,而不是将data1的值分配给str[num]。就地执行一个简单的 console.log(data1)

如果您仍然喜欢代码中的外部 console.log 位置。您阅读了async\await

dos 调用必须返回 Promise

关于javascript - Node.js:杂耍异步(learnyounode)。回调函数中的递归未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50547814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com