Javascript JS-Method最后执行,即使它是';s先调用

Javascript JS-Method最后执行,即使它是';s先调用,javascript,vue.js,html2canvas,Javascript,Vue.js,Html2canvas,我有两个函数,其中“form”是Vue对象的名称: form.sizeChartAsImage(); form.setSizeChart(); 这是上述功能的代码: setSizeChart: function () { for (i = 0; i < this.columns.length; i++) { this.product.size_chart.push({ position_x:

我有两个函数,其中“form”是Vue对象的名称:

form.sizeChartAsImage();
form.setSizeChart();
这是上述功能的代码:

setSizeChart: function () {
            for (i = 0; i < this.columns.length; i++) {
                this.product.size_chart.push({
                    position_x: 0,
                    position_y: i,
                    value: this.columns[i],
                })
                for (j = 0; j < this.data.length; j++) {
                    for (var key in this.data[j]) {
                        if(key === this.columns[i]) {
                            this.product.size_chart.push({
                                position_x: j+1,
                                position_y: i,
                                value: this.data[j][key],
                            })
                        }
                    }
                }
            }
        }

sizeChartAsImage: function() {
            html2canvas($("#size-chart").get(0)).then(canvas => {
                canvas.toBlob (blob => {
                    var sizechartImg = document.createElement('img');
                    url = URL.createObjectURL(blob);
                    sizechartImg.src = url;
                    this.product.size_chart_image = sizechartImg;
                    debugger;
                }, 'image/png');
            }) 
        }
setSizeChart:函数(){
对于(i=0;i{
canvas.toBlob(blob=>{
var sizechartImg=document.createElement('img');
url=url.createObjectURL(blob);
sizecharimg.src=url;
this.product.size\u chart\u image=sizechartImg;
调试器;
}“图像/png”);
}) 
}
然而,第二个函数首先执行(调试器首先进入),然后运行其余的代码;表单已提交,最后执行sizeChartAsImage(),不会产生任何影响(因为表单提交时“size\u chart\u image”为空)

这就是我试图渲染的,它确实生成了图像

<demo-grid
:data="data"
:columns="columns"
id="size-chart">
</demo-grid>


可能是因为它是Vue组件吗?性能问题?或者我可能需要使用回调吗?

这是因为
html2canvas($(“#大小图表”).get(0))
正在返回一个承诺(可能只是一个thenable),这是一个异步调用

因此,sizeChartAsImage将运行,
html2canvas($(“#大小图表”).get(0))
将执行。在脚本等待该函数返回时,它将继续设置并运行该函数。然后它将返回到
then(canvas=>
回调中的代码


您可以在回调结束时调用setSizeChart。或者,如果您使用的是ES2017或更高版本,您可以将sizeChartAsImage重新写入异步并等待它。

能否在打开花括号后直接添加console.log?我认为您在承诺的范围内某个地方打破了承诺(.then)…在回调结束时调用函数解决了计时问题,非常感谢