Vuejs2 Vue 2关于nextTick

Vuejs2 Vue 2关于nextTick,vuejs2,Vuejs2,我读到nextTick允许在下一个操作中执行代码。但这在我的代码中不起作用,有人能帮我吗?请纠正我。谢谢 vue先生 {{user.id}确实有效。这给了我以下错误: 获取404(未找到) 编辑#1 如果我做了这样的事情,它是有效的,但在我看来,这不应该是正确的方式 ..... methods:{ getUserInfo(){ var vm = this vm.$http.get('/getAuthUser').then((response)=>

我读到nextTick允许在下一个操作中执行代码。但这在我的代码中不起作用,有人能帮我吗?请纠正我。谢谢

vue先生

{{user.id}
确实有效。这给了我以下错误:

获取404(未找到)

编辑#1 如果我做了这样的事情,它是有效的,但在我看来,这不应该是正确的方式

.....
methods:{
      getUserInfo(){
        var vm = this
        vm.$http.get('/getAuthUser').then((response)=>{
          vm.user = response.data
          vm.$http.get('/getShop/'+vm.user.id).then((response)=>{
            vm.shop = response.data.data.shop
          })
        })
      },
}
.....
编辑#2 如果我这样做,它将无法工作,因为vm.user.id未设置

.....
methods:{
      getUserInfo(){
        var vm = this
        vm.$http.get('/getAuthUser').then((response)=>{
          vm.user = response.data
        })
        vm.$http.get('/getShop/'+vm.user.id).then((response)=>{
          vm.shop = response.data.data.shop
        })
      },
}
.....

我认为你对
nextTick
的理解是不正确的。如果您阅读了,它会告诉您传递给
nextTick
函数的回调将在下一次DOM更新后执行

假设您有一个属性,该属性使用指令确定DOM中是否存在元素。例如,如果更改属性的值以使元素存在于DOM中,则可能需要等待Vue处理更改并更新DOM,然后才能获取该元素的引用。在这种情况下,您应该使用
Vue.nextTick
来确保在您想要查询DOM以获取该元素时,该元素实际存在

您的场景与DOM无关

您需要一个接一个地执行两个异步HTTP调用,因为第二个调用依赖于第一个调用的结果。您的原始实现和第三个实现(编辑#2)都是不可靠的,因为在启动第二个HTTP请求之前,您无法确保第一个HTTP请求已完成,这解释了为什么未设置
vm.user.id
会出现错误

您的第二个实现(编辑#1)更为正确,因为第二个HTTP请求是在第一个HTTP请求完成后触发的。尽管如此,我还是建议做一个小小的修改:

getUserInfo() {
    vm.$http.get('/getAuthUser')
        .then(response => {
            vm.user = response.data;

            return vm.$http.get('/getShop/' + vm.user.id);
        }).then(response => {
            vm.shop = response.data.data.shop;
        });
}

第一个回调返回一个
Promise
,该结果将被送入第二个
调用,然后被送入
调用。我喜欢这种方法,因为它需要嵌套
然后
s。我还建议您阅读。

我认为另一种方法是正确的,您为什么这么认为?但他们提供了下一个方法让您正确地进行操作?为什么nextTick不起作用?关于
nextTick
,有一件事是不确定的,如果我将
nextTick
放在一个方法中,然后将该方法放入生命周期
created()
,因此
nextTick
中的代码不会在创建的生命周期
中执行,而是在下一次DOM更新时执行,对吗?或者DOM上的更新仅限于方法本身?或者在DOM next上进行任何更新?
nextTick
的回调将在调用
nextTick
后的下一次DOM更新中执行。我不知道是否每个方法都进行了DOM更新,或者它们是否以某种方式进行了批处理,也就是说,来自多个方法的DOM更新可以一次性应用。如果你想了解更多细节,我想这是一本不错的读物。谢谢你的进一步解释。让我们看看链接中提供的最后一个示例。对我来说,我原来的nextTick代码似乎是一样的。一旦设置了值,使用nextTick,代码将在设置值后执行,以使其正常工作。但在我的例子中,情况并非如此。这些示例非常不同,因为文档链接中提到的示例与DOM相关。在您的例子中,它与DOM完全无关。您发出第一个HTTP请求以获取用户id,第二个HTTP请求需要此用户id来获取其他数据。这与DOM无关,因此不需要
nextTick
,您必须等到第一个请求完成后(即,直到您拥有用户id)才能触发第二个HTTP请求
getUserInfo() {
    vm.$http.get('/getAuthUser')
        .then(response => {
            vm.user = response.data;

            return vm.$http.get('/getShop/' + vm.user.id);
        }).then(response => {
            vm.shop = response.data.data.shop;
        });
}