дать значение переменной внутри функции и доступ к ней вне - PullRequest
0 голосов
/ 18 мая 2019

У меня есть простая проверка формы, что я делаю: читаю файл json, получаю свойство из него (Array), затем проверяю, содержит ли он каждый элемент массива, сгенерированного пользователем, и ничего более, например:

[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 голосов
/ 18 мая 2019

см. fs.readFile document : асинхронно читает все содержимое файла.

таким образом, порядок выполнения:

execution order

или вы можете использовать fs.readFileSync()

0 голосов
/ 18 мая 2019

Переменная match внутри вашего обратного вызова fs.readFile - это та же самая переменная match, объявленная во внешней области видимости, благодаря замыканиям.Поэтому проблема во внутренней логике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...