Контекст объекта потерян внутри функции - PullRequest
0 голосов
/ 21 декабря 2018
router.get("/", function(req, res, next) {
    axios.get('https://www.behance.net/v2/users/user/projects/4889175?api_key=' + 'API')
    .then(function(response) {
      var data = response.data.projects;

      for(var i=0;i < data.length; i++) {
        Behance.findOne({ name: data[i].name }, function(err, user) {
          if (err) { return next(err); }
          if (!user) {
            console.log(this.name);
            // var newBehance = new Behance({
            //   name: this.name,
            // });
            // newBehance.save(next);
          }
        });
      }
    })
    .catch(function(error) {
      console.log(error);
    });
});

Я извлекаю проекты из Behance с их API и пытаюсь сохранить каждый из них в БД, если он еще не существует, используя findOne.Внутри цикла for data[i].name возвращает значение, но внутри функции findOne возвращает неопределенное значение.

Я не могу понять, почему это происходит ..

1 Ответ

0 голосов
/ 21 декабря 2018

Мне кажется, проблема в том, что вы выходите из системы this.name вместо data[i].name.Насколько я могу судить, this - это window.

. Вы можете использовать .forEach, чтобы немного упростить ситуацию:

router.get("/", function(req, res, next) {
  axios.get('https://www.behance.net/v2/users/user/projects/4889175?api_key=' + 'API')
    .then(function(response) {
      response.data.projects.forEach(({name}) => {
        Behance.findOne({ name }, function(err, user) {
          if (err) { return next(err); }
          if (!user) {
            console.log(name);
            // var newBehance = new Behance({
            //   name,
            // });
            // newBehance.save(next);
          }
        });
      }
    })
    .catch(function(error) {
      console.log(error);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...