一直都知道ES6 Promise可以解决无限套娃的问题,这不终于碰到了
需求:一个接口需执行两次分别拿到结果再次提交另外一个接口(小声bb:不知道为何设计的这么复杂)
// 添加子方案
handleaAddSon(rows, title) {
return new Promise((resolve, reject) => {
this.$api.addSonInsert(rows).then((res) => {
if (res.code == 200) {
if (title == "推荐方案") {
this.recommendId = res.rows[0].eventId;
} else {
this.comparisonId = res.rows[0].eventId;
}
resolve(true);
} else {
//返回错误信息
reject(res.msg);
}
});
});
},
submitForm() {
let p1 = this.handleaAddSon(this.recommend, this.valueRecommend);
let p2 = this.handleaAddSon(this.compare, this.valueCompare);
Promise.all([p1, p2])
.then((val) => {
//成功的回调
//成功的信息在上面已经处理所以这里只需接成功之后的操作
this.handleEditUpdate();
})
.catch((error) => {
//对错误信息进行处理
this.$message({
message: error,
type: "error",
});
});
}
探索
handleAdd(time){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve("time:"+time)
},time)
})
},
async handlePromise(){
console.log('======start======')
let p1 = await this.handleAdd(4000);
console.log(`======${p1}======`)
let p2 = await this.handleAdd(2000);
console.log(`======${p2}======`)
console.log('======end======')
}
打印结果
结尾:两种方式都能满足同步业务需求只是写法不同而已,条条大路通罗马