Я довольно новичок в мире обещаний, 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).
Я знаю, что синтаксис правильный, если получить значение, но внутри обещания это не нравится.
Я знаю, что это много, чтобы распаковать. Я, вероятно, делаю много вещей неправильно. Как вы можете сказать, многие из этих фрагментов кода взяты из примеров. Любая помощь будет приветствоваться.