写一起之后就 还没 执行 this.save("formValidate") 直接执行next() 了
save裡的操作是異步?
async写的异步
@小阿飞小蝴蝶:
那你得在save處理做點手腳
例如:由save 在完成後呼叫next
@RosonJ: 但是我也不是所有的保存都需要next
@小阿飞小蝴蝶:
將save 改為同步處理
或是
將next 當作參數傳入save,變成callback 方法
@RosonJ: 新手 不会用呀 怎么写呀 我是save 调用了别的方法
@小阿飞小蝴蝶:
哇塞...還有一層喔
saveProgram 才是那個異步方法對吧...
不好一層一層一直轉拋參數...這得想想
@RosonJ: 我把next()写在了settimeout 里面也行了 但是就是肯定有bug
@小阿飞小蝴蝶:
可行是肯定的
但這個處理方式不好
現在的操作步驟簡單,延後next的執行順序就好
一旦步驟變得複雜,又沒人注意到這個setTimeout,就會出bug,而且很難排查
@RosonJ: saveProgram 才是那個異步方法對吧... 是的 我保存和提交都是直接调用的saveProgram方法,,,真的头大
@RosonJ: 不好一層一層一直轉拋參數...這得想想 不用 因为save我只传了个字符串,,我直接调用saveProgram方法也是一样的 那我怎么在saveProgram回调呢
@小阿飞小蝴蝶:
this.saveProgram.then(v => {
if (type === 'next') {
next();
}
});
這樣試試吧
@小阿飞小蝴蝶:
完整一點應該這樣
onOk: () => {
//傳入next作為callback
this.save("formValidate", next);
}
save(name, callback) {
this.saveProgram.then(v => {
//直接呼叫callback
callback();
});
}
@RosonJ:
@小阿飞小蝴蝶:
save(name, callback) {
this.saveProgram(name).then(v => {
//直接呼叫callback
callback();
});
}
寫錯了,哈哈哈
這樣才對
@小阿飞小蝴蝶:
this.saveProgram(name)
有加"(name)"還錯?
@RosonJ: save(name, callback) {
this.saveProgram(name).then(v => {
//直接呼叫callback
callback();
});
我加了 这点我还是知道的
@小阿飞小蝴蝶:
可以看看你的saveProgram 方法嗎
async 方法接then 應該不會出錯才對
@RosonJ:
saveProgram(name, type) {
this.countNum = 0;
this.$refs[name].validate(async valid => {
if (valid) {
if (
JSON.stringify(
this.formValidate.industrialDesignEnterprise.thatTime
).indexOf("T") != -1
) {
this.formValidate.industrialDesignEnterprise.thatTime = JSON.stringify(
this.formValidate.industrialDesignEnterprise.thatTime
)
.split("T")[0]
.substring(1);
} else if (
this.formValidate.industrialDesignEnterprise.thatTime == ""
) {
this.formValidate.industrialDesignEnterprise.thatTime = null;
}
if (
JSON.stringify(
this.formValidate.industrialDesignEnterprise.establishedTime
).indexOf("T") != -1
) {
this.formValidate.industrialDesignEnterprise.establishedTime = JSON.stringify(
this.formValidate.industrialDesignEnterprise.establishedTime
)
.split("T")[0]
.substring(1);
} else if (
this.formValidate.industrialDesignEnterprise.establishedTime == ""
) {
this.formValidate.industrialDesignEnterprise.establishedTime = null;
}
let { messageCode } = await this.$http.post(
"/saveDesignInfo",
this.formValidate
);
if (messageCode === 10000) {
this.$Message.success("保存页面成功!");
if (type == "next") {
this.$router.push("/declare/Resources");
}
}
} else {
return this.$Message.error("内容格式不正确!");
}
});
},
@RosonJ: 基本就是处理了下格式,,,,然后发送请求
@小阿飞小蝴蝶:
saveProgram 不是async 方法阿哈哈哈
你真正的異步在這裡
我不確定行不行,你試試
save(name, callback) {
await this.saveProgram(name);
callback();
}
@RosonJ: hahahhahha 应该是可以了,,,但是这样是不是不管保存成功还是失败 都跳转??
@RosonJ:
我这个验证不通过他都跳转了
@小阿飞小蝴蝶:
我看messageCode 好像沒有回拋,也沒有紀錄
要做成功失敗的判斷,得先處理這個
@小阿飞小蝴蝶:
所以next 是不是應該在這裡執行才對?
@RosonJ: 是的 再传一层吗?
@小阿飞小蝴蝶:
看起來是的,一路傳進來是反而是最單純的作法了
@RosonJ: 对了 谢谢了 成了呀