Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数只能看到三个参数_Javascript_Node.js - Fatal编程技术网

Javascript 函数只能看到三个参数

Javascript 函数只能看到三个参数,javascript,node.js,Javascript,Node.js,这是一个在Node.js上运行的简化代码,它获取所有数据。 但是,当我添加name:datas[I]时,如何在变量“I”的函数值中插入(变量I=0…的)。name返回一个错误: TypeError:无法读取undefined的属性“undefined” var Crawler=require(“Crawler”).Crawler; var crawler=新的爬虫程序; 变量数据=[ {name:'John',url:'john025'}, {名称:'Jim',url:'jim04567'} ]

这是一个在Node.js上运行的简化代码,它获取所有数据。 但是,当我添加name:datas[I]时,如何在变量“I”函数值中插入(变量I=0…的)。name返回一个错误:

TypeError:无法读取undefined的属性“undefined”

var Crawler=require(“Crawler”).Crawler;
var crawler=新的爬虫程序;
变量数据=[
{name:'John',url:'john025'},
{名称:'Jim',url:'jim04567'}
];
函数crauler(完成){
对于(变量i=0;i
您试图在循环的
i
内部创建一个闭包,这会给您带来问题。这个答案应该可以帮助您:


您试图在循环中的
i
周围创建一个闭包,这会给您带来问题。这个答案应该可以帮助您:


您需要一个闭包来捕获值,这是解决问题的一种方法。请继续阅读

Javascript

var Crawler = require("crawler").Crawler;
var crawler = new Crawler;

var datas = [{
    name: 'John',
    url: 'john025'
}, {
    name: 'Jim',
    url: 'jim04567'
}];

function queue(link, i) {
        crawler.queue([{
            "uri": link,
            // inside this func
            "callback": function (error, result, $, datas, i) {
                var arr = $('.blogpost').map(function (index) {
                    var str = $(this).attr('href');
                    var object = {
                        numb: str,
                        name: datas[i].name
                    };
                    return obj;
                }).get().join(',');
                done(arr);
            }
        }]);
}

function crauler(done) {
    for (var i = 0; i < datas.length; i++) {
        var link = 'http://somesite.com/' + datas[i].url;
        queue(link, i);
};

crauler(function (arr) {
    console.log(arr);
});
var Crawler=require(“Crawler”).Crawler;
var crawler=新的爬虫程序;
变量数据=[{
姓名:'约翰',
网址:“john025”
}, {
名字:“吉姆”,
url:'jim04567'
}];
功能队列(链接,i){
爬虫队列([{
“uri”:链接,
//在这个函数里面
“回调”:函数(错误、结果、$、数据、i){
var arr=$('.blogpost').map(函数(索引){
var str=$(this.attr('href');
变量对象={
麻木:str,
名称:datas[i].name
};
返回obj;
}).get().join(',');
完成(arr);
}
}]);
}
函数crauler(完成){
对于(变量i=0;i
您需要一个闭包来捕获值,这是解决问题的一种方法。请继续阅读

Javascript

var Crawler = require("crawler").Crawler;
var crawler = new Crawler;

var datas = [{
    name: 'John',
    url: 'john025'
}, {
    name: 'Jim',
    url: 'jim04567'
}];

function queue(link, i) {
        crawler.queue([{
            "uri": link,
            // inside this func
            "callback": function (error, result, $, datas, i) {
                var arr = $('.blogpost').map(function (index) {
                    var str = $(this).attr('href');
                    var object = {
                        numb: str,
                        name: datas[i].name
                    };
                    return obj;
                }).get().join(',');
                done(arr);
            }
        }]);
}

function crauler(done) {
    for (var i = 0; i < datas.length; i++) {
        var link = 'http://somesite.com/' + datas[i].url;
        queue(link, i);
};

crauler(function (arr) {
    console.log(arr);
});
var Crawler=require(“Crawler”).Crawler;
var crawler=新的爬虫程序;
变量数据=[{
姓名:'约翰',
网址:“john025”
}, {
名字:“吉姆”,
url:'jim04567'
}];
功能队列(链接,i){
爬虫队列([{
“uri”:链接,
//在这个函数里面
“回调”:函数(错误、结果、$、数据、i){
var arr=$('.blogpost').map(函数(索引){
var str=$(this.attr('href');
变量对象={
麻木:str,
名称:datas[i].name
};
返回obj;
}).get().join(',');
完成(arr);
}
}]);
}
函数crauler(完成){
对于(变量i=0;i
您不能像这样将
数据
i
传递到回调函数中。回调函数将使用什么参数调用取决于调用方,您无法控制它

您将看到“TypeError:无法读取undefined的属性'undefined',因为您希望回调函数将
datas
i
作为参数;但是调用者将仅使用前3个参数调用回调[],因此
datas
i
未定义的

因此,您应该从以下行中删除
数据
i

"callback": function (error, result, $, datas, i) {
由于
datas
是在回调函数的外部范围内定义的,因此回调可以访问
datas
,而无需任何特殊处理。对于变量
i
,如其他答案中所述,这有点棘手,因此需要为其创建一个闭包

因此,回调函数定义应该如下所示:

"callback": (function(i) { // create closure for i
    return function (error, result, $) { // no more datas and i here
        var arr = $('.blogpost').map(function (index) {
            var str = $(this).attr('href');
            var object = {
                numb: str,
                name: datas[i].name // access datas as it
            };
            return obj; 
        }).get().join(',');
        done(arr);
    }
})(i)

您不能像这样将
data
i
传递到回调函数中。调用回调函数的参数由调用方决定,您无法控制

您将看到“TypeError:无法读取undefined的属性'undefined',因为您希望回调函数将
datas
i
作为参数;但是调用者将仅使用前3个参数调用回调[],因此
datas
i
未定义的

因此,您应该从以下行中删除
数据
i

"callback": function (error, result, $, datas, i) {
由于
datas
是在回调函数的外部范围内定义的,因此回调可以访问
datas
,而无需任何特殊处理。对于变量
i
,如其他答案中所述,这有点棘手,因此需要为其创建一个闭包

因此,回调函数定义应该如下所示:

"callback": (function(i) { // create closure for i
    return function (error, result, $) { // no more datas and i here
        var arr = $('.blogpost').map(function (index) {
            var str = $(this).attr('href');
            var object = {
                numb: str,
                name: datas[i].name // access datas as it
            };
            return obj; 
        }).get().join(',');
        done(arr);
    }
})(i)

在for循环外声明
i
。@bfavaretto不是。循环变量不是TypeError的主要问题,请参阅我的答案以了解详细信息。@jaux错误是由于试图解决问题而引起的,因此dupe链接是有意义的。顺便说一句,回答得很好。@bfavaretto谢谢!但这个问题确实不是臭名昭著的循环问题。臭名昭著的lo