使用promise从数据库中获取标识值



我对promise、axios和节点mssql世界还很陌生。所以我可能做错了。

我有一个vue.js应用程序,试图在其中向表中插入一条记录。我希望使用promise来获得我刚刚执行的插入的身份值的值。

插入部件正在工作,但将其取回并使用它就不行了。

这是我的调用代码,它被包装在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是一个数组。我将在下面向您展示我的DB代码。CCD_ 1是我能看到的获得该值的唯一方式。

我已经打印出了这个值,超出了承诺,它最终会返回一个值。这让我相信这可能是一个时间问题。

我的数据库代码如下:

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}〕}

当我从vue代码中查看console.log时,我得到以下消息:

"无法获取未定义或null引用的属性'0'">

但是,正如我所提到的,如果我在promise之外打印vm.returnId["Data"][0].id,我最终会在后续调用中得到一个值(id落后1(。

我知道,就获取值而言,语法是正确的,但在promise内部,它不喜欢它

我知道这是一个很大的打开。我可能做错了很多事。正如您所知,这些代码片段中的许多都是直接来自示例的。欢迎任何帮助。

问题的根源在于then需要一个函数作为参数。.then(console.log(vm.returnId["Data"][0].id))是一个不正确的调用。

应该是.then(() => console.log(vm.returnId["Data"][0].id))

最新更新