我对承诺的世界,新世界和节点世界充满了全新的感觉。所以我可能做错了。
我有一个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)
      }
});

调用此函数后,我已经验证了插入的工作方式(并且从代码中打印出正确的值):
{数据:[{id:24}}
当我从Vue代码查看console.log时,会收到以下消息:
“无法获取未定义或空引用的属性“0”
然而,正如我所提到的,如果我在承诺之外打印出vm.returnId["Data"][0].id,我最终会在随后的调用中得到一个值(id在后面1)。
我知道语法在获取值方面是正确的,但是在承诺中它不喜欢它。
我知道这有很多东西要拆。我可能做错了很多事。正如你所知道的,这些代码片段很多都是从样本中直接得到的。欢迎任何帮助。

最佳答案

问题的根源在于then需要一个函数作为参数。
.then(console.log(vm.returnId["Data"][0].id))是一个错误的呼叫。
应该.then(() => console.log(vm.returnId["Data"][0].id))

关于javascript - 使用Promise从数据库获取身份值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53249685/

10-12 15:58