gpt4 book ai didi

node.js - Node 教程 - LearnYouNode - 杂耍异步 - 使用嵌套回调

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:59 25 4
gpt4 key购买 nike

我试图在 nodeschool.io 的“learnyounode”研讨会中解决“Juggling Async”问题。我在这里看到了很多关于这个问题的问题,它不起作用,因为 url 是从循环中调用的。我明白为什么那行不通。我曾经尝试过类似的事情。

var http=require('http');
console.log(process.argv[2],process.argv[3],process.argv[4]);
fn(process.argv[2],
fn(process.argv[3],
fn(process.argv[4])));


function fn(url,callback){
http.get(url,function(response){
var string='';
response.setEncoding('utf8');
response.on('data',function(data){
string+=data;
});
response.on('end',function(){
console.log(url,string);
if (callback) {
callback();
}
});
});
};

根据我的理解,第二个 GET 调用应该仅在第一个 GET 调用结束后才发出,因为它是在响应结束后启动的。但输出的顺序总是不同的。

我已经看到了正确的解决方案。我知道这样做无法利用异步的优势,但是回调不应该使其按顺序输出吗?

最佳答案

当您传入函数作为回调时,只需传入函数名称或函数定义。通过提供参数,您实际上是在调用该函数。

例如假设您有一个函数 f1,它接受另一个函数作为参数,还有一个您想要传递给 f1 的函数 f2:

function f1(func_param) {
console.log('Executing f1!');
}
function f2(a_param) {
console.log('Executing f2!');
}

当您执行以下调用时(与您正在执行的操作类似,提供回调函数并指定回调参数):

f1(f2(process.argv[2]));

您首先评估 f2,因此“执行 f2!”将首先打印。 f2 的返回值将作为参数传递给 f1,f1 将执行并打印“正在执行 f1!”

在您的通话中

fn(process.argv[2],
fn(process.argv[3],
fn(process.argv[4])));

您的意思是,让我们将 fn(process.argv[4]) 的结果作为回调传递给 fn(process.argv[3]),我们将获得调用该结果并将其作为回调传递给 fn(process.argv[2])。

关于node.js - Node 教程 - LearnYouNode - 杂耍异步 - 使用嵌套回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838643/

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