Promise异步请求变成同步

361 阅读1分钟

最近在写CRMEB OA客户管理系统的客户列表模块有个需求,保存客户并继续添加合同和保存合同并继续添加付款记录,这个页面跳转简单,但是比较难的是调接口后拿着接口返回的数据要同步到下一个页面,这一部分当时写的时候遇到的问题主要是:保存成功后页面已经跳转到下一个,但是保存接口返的客户id在下一个页面一直打印不出来,打印值为undefined。最后想了一下就是异步和同步的问题。使用Promise完美解决。  

1. Promise是一个容器,保存着某个未来才会结束的事件(异步操作)的结果。

  ad991310bff1c245e21ae8be2d39a370.jpeg

2. Promise有三种状态: pending(进行时),fulfilled(成功)和reJect(失败),只有异步操作的结果可以改变promise的状态,一旦promise从pending状态转化为fulfilled和reJect后就不会再改变。

  48691c25cd75f8f894ed0a63f70d4374.jpeg

3. 使用:

Const promise  = new Promie(function (resolve,reject){

If(/* 异步操作成功*/){

resolve(value)

} else{

reject(value)

}

})

4. 项目中使用   

// 提交

handleConfirm() {

//  请求的时候调用Promise

      return new Promise((resolve, reject) => {

        this.$refs.form.validate((valid) => {

          if (valid) {

            const data = {

              eid: this.formInfo.id

            };

this.clientContractSave(data);

            resolve(valid);

          }

        });

      });

},

// 调用的方法的时候

 this.$refs.contractInfo.handleConfirm().then(() => {

// 调用接口.then()

}

这样子就会把异步变成同步,在开发中如果还有疑问可以在下方留言。