получение значения идентичности из базы данных с помощью обещаний - PullRequest
0 голосов
/ 11 ноября 2018

Я довольно новичок в мире обещаний, axios и мире node-mssql. Так что я, вероятно, делаю это неправильно.

У меня есть приложение vue.js, в котором я пытаюсь вставить запись в таблицу. Я надеялся использовать обещания, чтобы получить значение идентификатора вставки, которую я только что выполнил.

Вставная часть работает, но вернуть ее и использовать нет.

Вот мой код вызова, который включен в Try / Catch (ошибка ниже):

            var addFamilyMemberRowObj;

            axios
              .get("http://localhost:5000/addMember?familyId="+ vm.familyId+"&memberName="+vm.memberName+"&isAdmin="+vm.isParent)
              .then(response => (vm.returnId = response.data))
              .then(console.log(vm.returnId["Data"][0].id))
              .then(vm.memberId =  vm.returnId["Data"][0].id)
               .then(
                 addFamilyMemberRowObj = {
                  arrIndex: vm.addFamilyRowIndex,
                  familyId: vm.familyId,
                  familyName: vm.familyName,
                  familyMemberName: vm.memberName,
                  memberId: vm.memberId,
                  isParent: vm.isParent
                }
              )
              .then(vm.addFamilyRowArray.push(addFamilyMemberRowObj))
              .then(vm.addFamilyRowIndex = vm.addFamilyRowIndex + 1);  

Некоторые предметы, которые вы, возможно, должны знать. returnId - это массив. Я покажу вам мой код БД ниже. vm.returnId["Data"][0].id - единственный способ получить значение, которое я вижу.

Я распечатал это значение вне обещания, и оно в итоге возвращает значение. Что заставляет меня верить, что это может быть проблемой времени.

Код моей базы данных выглядит следующим образом:

app.get('/addMember', function(req,res){
    var data = {
              "Data":""
      };

      try 
      {
          const pool7 = new sql2.ConnectionPool(config, err => {
              pool7.request()
              .query("INSERT INTO Member (FamilyId, MemberName, isAdmin)VALUES("+ req.query.familyId +",'" + req.query.memberName + "', '" + req.query.isAdmin + "') SELECT SCOPE_IDENTITY() as id", (err, result) => {
                  data["Data"] = result.recordset;
                  console.log(data);

                  res.json(data);
              })
          })

      } catch (err) {
          console.log("hasLogin: " + err)
      }     
});

После этого я убедился, что вставка работает (и console.log также выводит правильное значение [из этого кода]):

{Данные: [{id: 24}]}

Когда я смотрю на console.log из кода vue, я получаю следующее сообщение:

"Невозможно получить свойство '0' с неопределенной или нулевой ссылкой"

Однако, как я уже упоминал, если я распечатаю vm.returnId["Data"][0].id вне обещания, я в конечном итоге получаю значение для последующих вызовов (идентификатор равен 1).

Я знаю, что синтаксис правильный, если получить значение, но внутри обещания это не нравится.

Я знаю, что это много, чтобы распаковать. Я, вероятно, делаю много вещей неправильно. Как вы можете сказать, многие из этих фрагментов кода взяты из примеров. Любая помощь будет приветствоваться.

1 Ответ

0 голосов
/ 11 ноября 2018

Корень проблемы в том, что then ожидает функцию в качестве аргумента..then(console.log(vm.returnId["Data"][0].id)) - неправильный вызов.

Это должно быть .then(() => console.log(vm.returnId["Data"][0].id))

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