await ,async,promise三者结合使用可以解决异步编程时需要实现部分代码同步的问题

  1.       await 必须要用在async里面,表示需要等待用了await这个词修饰的promise对象执行完才可以继续执行。
  2.       下面是我写的demo:
     <script type="text/javascript">    
                function getPromise(){
                    return     new Promise((resolve,reject)=>{
                        setTimeout(()=>{console.log("successful");resolve(); },1000);
                        },
                    )
            }            
                async function testAsync(){
                    await getPromise();
                    console.log("later");
                }
                testAsync();//输出 successful,later 。去掉await输出later,successful
        </script>
  3.  用过vue axios请求插件的可以看下面这个应用实例:  
    test(){
       let _this=this;
       return _this.$axios({url:'test'});
     },
    async testAwait(){
          let {data}=  await  this.test();
          this.getProductList(data);//等待上面一行代码执行完才会执行这行代码
     },
    this.testAwait();
    //当不需要方法的返回值时也可以这样写  axios和then返回的都是promise对象,.then返回链式函数
    test(phone) {
       let _this=this;
      return _this.$axios({url:'test'
        }).then(({data}) => {
          console.log(1);
         })
     },
      async testAwait(){
          await  this.test();
          this.getProductList();


     }

4 .关于Promise 

          a、js原本是同步执行的(从上往下执行)       

          b、Promise 是同步执行的,但他的回调函数(then/catch)是异步执行                                                                                 

         下面是个例子

        <script type="text/javascript">
			//延迟函数
			function waitTime(type, time) {
				let startT = (new Date()).getTime()
				while ((new Date()).getTime() - startT < time) {}
				console.log(type);
			}

			function getPromise() {
				return new Promise((resolve, reject) => {
					//下面是同步执行
					waitTime('promise', 1000) //1s后打印promise
					reject() //执行catch or resolve() 执行then()
				}, )
			}
			function testExecOrder() {
				getPromise().then(() => {
					//异步执行
					waitTime('then', 1000)
				}).catch(() => {
					//异步执行
					waitTime('catch', 1000)
				})
				console.log("later");
			}
			testExecOrder(); // promise later catch 
		</script>

 

                                                                                                                                                                          

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值