线在vue.js功能之前先前执行结束

问题描述:

我有以下功能提交表单:线在vue.js功能之前先前执行结束

methods: { 
    submit_form: function() { 
    this.drawing = dat.toImage(); 
    this.$refs.my_form.submit() 
    } 
} 

drawing变量被分配给一个输入像内my_form

<input type="text" name="doodle" :value="drawing"> 

问题是在this.drawing更新为dat.toImage()的值之前发送表单。事实上,如果我先前的功能分成两个:

methods: { 
    submit_form: function() { 
    this.$refs.my_form.submit() 
    }, 
    set_drawing: function() { 
    this.drawing = dat.toImage() 
    } 
} 

当我运行第一set_drawing()然后submit_form()(具有两个不同的按钮),则形式被正确地与更新的绘图值发送。因此,出于某种原因,当两行都在同一个函数中时,表单将在前一行的执行结束之前发送。

有关为什么会发生这种情况以及如何解决它的任何想法?

UPDATE:

这也不管用,空值与形式发送。

data: { 
    drawing: null 
} 
methods: { 
    submit_form: function() { 
    this.drawing = dat.toImage(); 
    while (this.drawing == null) { 
     false 
    } 
    this.$refs.my_form.submit() 
    } 
} 

看来,无论值I初始化drawing用,与形式发送的值。事实上,我也在网站上显示drawing的价值,当我点击提交时,我发现它会改变,但上面的循环永远不会结束。

.toImage方法属于atrament.js库。

而且,赶上提交事件我做的:

<form method="POST" class="model-form" v-on:submit.prevent="submit_form()" ref="my_form"> 

似乎dat.toImage()是一个异步方法,所以Java脚本开始执行下一个方法,而这还没有完成。如果这是你自己的方法,你可以从这个函数返回一个承诺,并根据这个承诺解决你的第二个方法。

+0

感谢您的回复。我做了一些更多的实验来检查这是否可能是问题的根源,但似乎并非如此。我已经用这个信息更新了这个问题。 – user1294122

+0

@ user1294122我没有看到你在编辑的版本中使用promises,你可以看到一个例子[这里](https://spring.io/understanding/javascript-promises)关于如何使用它。 – Saurabh

+2

@ user1294122在更新中,你犯了完全相同的错误[我曾经犯过一次](思考JavaScript的问题)(http://stackoverflow.com/questions/31210242/whilecount-3-fail-to-check-callback-state)会执行异步作业满足时的回调代码,但事实上,js会在每次到达函数结束时检查是否执行某个回调,因此,由我们两人滥用的while循环都不起作用我们想要的方式。 –