首页 新闻 搜索 专区 学院

next() 可以在调用 this.save 执行完之后再执行吗

0
悬赏园豆:10 [已解决问题] 解决于 2020-08-06 18:01


写一起之后就 还没 执行 this.save("formValidate") 直接执行next() 了

小阿飞小蝴蝶的主页 小阿飞小蝴蝶 | 初学一级 | 园豆:84
提问于:2020-08-06 15:05
< >
分享
最佳答案
0

save裡的操作是異步?

收获园豆:10
RosonJ | 老鸟四级 |园豆:4558 | 2020-08-06 15:08

async写的异步

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 15:11

@小阿飞小蝴蝶:
那你得在save處理做點手腳
例如:由save 在完成後呼叫next

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 15:15

@RosonJ: 但是我也不是所有的保存都需要next

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 15:20

@小阿飞小蝴蝶:
將save 改為同步處理
或是
將next 當作參數傳入save,變成callback 方法

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 15:22

@RosonJ: 新手 不会用呀 怎么写呀 我是save 调用了别的方法

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 15:34

@小阿飞小蝴蝶:
哇塞...還有一層喔
saveProgram 才是那個異步方法對吧...
不好一層一層一直轉拋參數...這得想想

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 15:43

@RosonJ: 我把next()写在了settimeout 里面也行了 但是就是肯定有bug

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 15:45

@小阿飞小蝴蝶:
可行是肯定的
但這個處理方式不好
現在的操作步驟簡單,延後next的執行順序就好
一旦步驟變得複雜,又沒人注意到這個setTimeout,就會出bug,而且很難排查

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 15:48

@RosonJ: saveProgram 才是那個異步方法對吧... 是的 我保存和提交都是直接调用的saveProgram方法,,,真的头大

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 15:52

@RosonJ: 不好一層一層一直轉拋參數...這得想想 不用 因为save我只传了个字符串,,我直接调用saveProgram方法也是一样的 那我怎么在saveProgram回调呢

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 16:02

@小阿飞小蝴蝶:

this.saveProgram.then(v => {
    if (type === 'next') {
        next();
    }
});

這樣試試吧

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 16:02

@小阿飞小蝴蝶:
完整一點應該這樣

onOk: () => {
    //傳入next作為callback
    this.save("formValidate", next);
}
save(name, callback) {
    this.saveProgram.then(v => {
        //直接呼叫callback
        callback();
    });
}
RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 16:09

@RosonJ:

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 16:51

@小阿飞小蝴蝶:

save(name, callback) {
    this.saveProgram(name).then(v => {
        //直接呼叫callback
        callback();
    });
}

寫錯了,哈哈哈
這樣才對

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 16:52

@小阿飞小蝴蝶:

this.saveProgram(name)

有加"(name)"還錯?

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 16:57

@RosonJ: save(name, callback) {
this.saveProgram(name).then(v => {
//直接呼叫callback
callback();
});

我加了 这点我还是知道的

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 16:58

@小阿飞小蝴蝶:
可以看看你的saveProgram 方法嗎
async 方法接then 應該不會出錯才對

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 17:01

@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("内容格式不正确!");
}
});
},

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:03

@RosonJ: 基本就是处理了下格式,,,,然后发送请求

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:06

@小阿飞小蝴蝶:
saveProgram 不是async 方法阿哈哈哈
你真正的異步在這裡
img

我不確定行不行,你試試

save(name, callback) {
    await this.saveProgram(name);
    callback();
}
RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 17:15

@RosonJ: hahahhahha 应该是可以了,,,但是这样是不是不管保存成功还是失败 都跳转??

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:20

@RosonJ:
我这个验证不通过他都跳转了

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:22

@小阿飞小蝴蝶:
我看messageCode 好像沒有回拋,也沒有紀錄
要做成功失敗的判斷,得先處理這個

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 17:24

@小阿飞小蝴蝶:
所以next 是不是應該在這裡執行才對?
img

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 17:26

@RosonJ: 是的 再传一层吗?

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:27

@小阿飞小蝴蝶:
看起來是的,一路傳進來是反而是最單純的作法了

RosonJ | 园豆:4558 (老鸟四级) | 2020-08-06 17:28

@RosonJ: 对了 谢谢了 成了呀

小阿飞小蝴蝶 | 园豆:84 (初学一级) | 2020-08-06 17:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册