给函数内部的变量赋值并在函数外部访问

时间:2019-05-18 14:21:39

标签: javascript arrays node.js json express

我有简单的表单验证,我正在做的是:读取json文件,从中获取属性(数组),然后检查它是否包含用户生成的数组的每个元素,仅此而已,例如:

[1,2,3,4,5] (json file array)
[1,2,3,4,5,6] (U.G array) //it must return false

所以我正在使用此代码实现此目的:

 const contains = (arr1, arr2) => {
  arr2.every(v => arr1.indexOf(v) !== -1)
 }
   var match;
   fs.readFile('../tags.json', 'utf8', (err, data)=>{

     var JsonData = JSON.parse(data);
     var tagsArray = JsonData.tags;
     console.log(tagsArray)
     console.log(tags)
     if(tagsArray instanceof Array){
       console.log('tagsArray is array')
     }
      if(!contains(tagsArray, tags)){
        match = false
      }   
      else{
        match = true
      }
     console.log(match + ' blah1')

   });

   console.log(match + ' blah2')
 if(match == false){
    return res.status(409).send({
      message: 'Do not provide your own tags'
    });
  }

,但是每次都返回false,因为每次contains(tagsArray, tags)都未定义。那么这是什么线索呢?

2 个答案:

答案 0 :(得分:0)

match回调中的fs.readFile变量与外部作用域中声明的变量match相同,这要归功于闭包。 因此,问题出在内部逻辑上。

答案 1 :(得分:0)

请参见fs.readFile document:异步读取文件的全部内容。

所以执行顺序是:

execution order

或者您可以使用fs.readFileSync()