Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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,我有一个功能,它可以从网站数据中创建对象。对象如下所示: { name: 'Object Name', baseURL: 'http://xyz123.com', mainImg_select: '#item_image a', mainImg_ref: 'href', moreImg_select: '.extra_images', moreImg_ref: 'href', one_brand: '', urls: [], categories: [

我有一个功能,它可以从网站数据中创建对象。对象如下所示:

{ 
  name: 'Object Name',
  baseURL: 'http://xyz123.com',
  mainImg_select: '#item_image a',
  mainImg_ref: 'href',
  moreImg_select: '.extra_images',
  moreImg_ref: 'href',
  one_brand: '',
  urls: [],
  categories:
   [ { name: 'Cat 1',
       url: 'http://xyz123.com/category1' },
     { name: 'Cat 2',
       url: 'http://xyz123.com/category2' },
     { name: 'Cat 3',
       url: 'http://xyz123.com/category3' }
   ] 
}
我正在运行一些使用
request
cheerio
模块的函数。
request
函数以某种方式删除了我的对象的
类别
属性;当记录对象时,我看到
“categories:undefined”
(因此属性仍然存在,只是删除了它的内容)

真正奇怪的是,只有当我使用存储在由脚本创建的变量中的对象时才会发生这种情况。如果我创建对象,记录它,然后直接复制并粘贴到代码中(如上所述,除了
var object123={stuff goes here}
),那么我的节点脚本工作正常

PrepJSON
是一个将JSON文件转换为对象的类。为了避免成为一堵巨大的代码墙,我将其粘贴在这里:

唯一的区别是,在其中一个中,我使用的是我的
prepJSON
函数返回的对象,而在另一个中,我使用的是控制台。记录该对象,运行函数,复制日志,将其放入变量中,然后脚本神奇地工作

脚本不会触及对象的其余部分-只有类别,它存储了一个对象数组。为了完整起见,下面介绍了如何在prepJSON中创建
对象。类别
。这是脚本唯一一次触及它们:

storeCats.categories = (function(){
        $('.view-Departments .field-content a').each(function(index){
        storeCats.categories.push({'name': $(this).text(), 'url': $(this).attr('href')}); 
        if(index == $('.view-Departments .field-content a').length -1) {callback(null);} 
    })}
)();

听起来你有一个全局变量,在异步调用过程中被其他变量变异了。@SLaks我也这么认为。我尝试过将所有内容重命名为非常模糊的名称(
categories
to
cats1
等等)但是没有用。@SLaks进一步说,我不认为这能解释这里的情况。澄清一下,当我将对象粘贴到变量中时,对象创建脚本仍然运行。字面上唯一的区别是它吐出的对象没有被使用,而复制/粘贴的对象(应该完全相同)而是。您的
obj123
从何而来?它没有作为参数传递给
requestHandler
@SLaks关于它是一个全局变量(或者更可能是一个循环变量,不一定是全局变量)的建议,该变量经过了变异(不是覆盖,而是更改)听起来这是一个合理的原因,特别是如果您传递该(全局)变量(当“填充”obj123的代码仍然可以更改它时).@robertklep请参见上文,我已经编辑了一些代码,并试图使其保持简短。请求函数是在回调中生成的,该回调仅在创建对象后启动,我是否天真地认为这意味着前面的脚本已经完成了它?