当前位置: 首页 > 面试题库 >

Node.JS:如何将变量传递给异步回调?

谭飞掣
2023-03-14
问题内容

我确定我的问题是基于对node.js中的异步编程缺乏了解,但这是可行的。

例如:我有一个要爬网的链接列表。当每个请求都返回时,我想知道它的URL。但是,大概是由于竞争条件造成的,每个请求都将URL返回设置为列表中的最后一个值。

var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
    var url = links[link];
    require('request')(url, function() {
        console.log(url);
    });
}

预期产量:

http://google.com
http://yahoo.com

实际输出:

http://yahoo.com
http://yahoo.com

所以我的问题是:

  1. 如何将url(按值)传递给回调函数?要么
  2. 链接HTTP请求以使其顺序运行的正确方法是什么?要么
  3. 我还缺少什么?

PS:对于1.我不想要一种解决方案来检查回调的参数,而是希望回调的一种通用方法是“从上方”了解变量。


问题答案:

您的url变量没有作用于for循环,因为JavaScript仅支持全局和函数作用域。因此,您需要为request调用创建一个函数作用域,url以使用立即函数来捕获循环的每次迭代中的值:

var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
    (function(url) {
        require('request')(url, function() {
            console.log(url);
        });
    })(links[link]);
}

顺便说一句,require在循环中间嵌入a 不是一个好习惯。它可能应该重写为:

var request = require('request');
var links = ['http://google.com', 'http://yahoo.com'];
for (link in links) {
    (function(url) {
        request(url, function() {
            console.log(url);
        });
    })(links[link]);
}


 类似资料:
  • 问题内容: 我需要更新我的时间。该值由正在执行的函数返回。 返回一个整数。 这将返回未防御状态。因此,我需要获取计数并将其传递给 问题答案: 如果您需要在每次调用之后更改重复间隔,则不能使用-使用恒定重复。您需要使用,因此您可以每次更改时间段:

  • 问题内容: 如何在不刷新页面的情况下将变量从jQuery传递到PHP?当我单击一个复选框时,我想将一个变量从jQuery传递到PHP。我也在使用formdialog。 我的PHP代码 我的JavaScript代码 问题答案: Ajax可以做到这一点。谷歌它,并检查api.jquery.com并查看ajax函数,.ajax(),.post(),.get(),.load()等。 关于您的特定问题,这是

  • 问题内容: 使用异步模块时,如何将参数从上一个回调传递到下一个回调? 这是来自github上的文档的示例 问题答案: 您可以将异步函数与异步模块的函数链接在一起。这使您可以说:“先执行x,然后将结果传递给函数y,然后将结果传递给z”。从[docs] [1]复制: 您严格不需要异步模块来完成此任务;此功能旨在使代码更易于阅读。如果您不想使用异步模块,则始终可以只使用传统的回调。

  • 本文向大家介绍如何将JavaScript变量传递给PHP?,包括了如何将JavaScript变量传递给PHP?的使用技巧和注意事项,需要的朋友参考一下 您可以在PHP的同一页面上轻松获取JavaScript变量值。尝试以下代码L。

  • 问题内容: 我有一个返回散列的javascript函数。我需要将此哈希传递给php来进行处理。最好的方法是什么? 问题答案: 假设您的意思是 JavaScript 函数返回哈希并将其发送给PHP- 然后是AJAX

  • 问题内容: 可以说我有一个SP,其语句如下: 但是数据必须通过包含值字符串的单个变量到达该子句。以下内容链接 但是它不能那样工作。任何想法如何做到这一点? 问题答案: 像这样传递参数值- 。然后,使用FIND_IN_SET函数就足够了-