使用Promise从数据库获取身份值

时间:2018-11-11 14:28:08

标签: javascript vue.js promise axios

我对Promise,Axios和Node-mssql世界非常陌生。所以我可能做错了。

我有一个vue.js应用程序,试图在其中将记录插入表中。我希望使用promises来获取刚刚执行的插入操作的标识值。

插入部分正在工作,但不能重新使用它。

这是我的调用代码,包装在“尝试/捕获”中(以下错误):

            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是我看到的获取值的唯一方法。

我在promise之外打印了该值,并且最终确实返回了一个值。这使我相信这可能是时间问题。

我的数据库代码如下:

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时,会收到以下消息:

  

“无法获取未定义或空引用的属性'0'”

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

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

我知道要打开很多东西。我可能做错了很多事情。如您所知,其中许多代码片段都是直接来自样本。任何帮助都将受到欢迎。

1 个答案:

答案 0 :(得分:1)

问题的根源是then期望函数作为参数。 .then(console.log(vm.returnId["Data"][0].id))是不正确的通话。

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