案例:
1、问题:
以下代码中,if 和 else里面都有以下两句话,能不能把这两句话放在else之后执行?
//关闭对话框 this.dialogFormVisible = false; //刷新数据 this.list();
save() {//修改和新增显示的是同一个表单,点击确定会触发同一个方法//所有这里需要判断是 修改还是新增if (this.form.id){//修改时会把id传给表单//是修改request.post('api/furn/updata', this.form).then(res => {console.log(res);if (res.code==200){//弹出消息框this.$message({message: '修改成功',type: 'success',});}else if (res.code == 400) {//弹出消息框this.$message.error('修改失败');}//关闭对话框this.dialogFormVisible = false;//刷新数据this.list();})}else {request.post('api/furn/save', this.form).then(response => {console.log(response);//关闭对话框this.dialogFormVisible = false;//刷新数据this.list();})}}
2、答案是:
不能,这样做的后果是,修改数据后,页面得到的数据不是最新的。不是调用了list()方法刷新数据吗,为什么得到的数据不是修改之后的呢?
因为这里本质上使用的是Ajax异步请求,如果将上面的两条语句放在else之后。因为是异步请求,所有不会等Ajax请求执行完 才往下执行list()方法,也就是说,在还没修改好数据时,就执行了list()方法,所有得到的数据不是最新的。