async await 与promise知识点与逻辑题

promise和async都是做异步处理的, 使异步转为同步

1.promise

它和Promise诞生的目的都是为了解决“回调地狱”,
promise使用方法:

<button @click="testBtn()">点击</button>

get(data) {
  return new Promise((resolve, reject)=>{
    if (data > 5) {
      resolve(data);
    } else {
      reject("数据都是不大于5");
    }
  });
},
 
testF(num) {
  console.log("=====", num)
},
 
// 调用
testBtn() {
  this.get(6).then((num)=>{
    this.testF(num);
  });
   this.get(3).then((num)=>{
    this.testF(num);
  });
}

2.async

async,会返回一个promise对象

如果async函数中是return一个值,这个值就是Promise对象中resolve的值;

如果async函数中是throw一个值,这个值就是Promise对象中reject的值。

async的使用方法:

async function imAsync(num) {
  if (num > 0) {
    return num // 这里相当于resolve(num)
  } else {
    throw num // 这里相当于reject(num)
  }
}
 
imAsync(1).then(function (v) {
  console.log(v); // 1
});
 
// 注意这里是catch
imAsync(0).catch(function (v) {
  console.log(v); // 0
})
  

3.await

await不会单独使用,他会和async一起使用, 如果直接使用await的话会不起作用,

await会暂停当前async函数的执行,等待后面的Promise的计算结果返回以后再继续执行当前的async函数

使用场景:

在发起请求获取数据的时候,如果个return返回数据, 这时就需要用到await

async test(){

const currentArr = []
await this.$axios
        .get("/topsellerCategorys/", {
          marketplaceID: item.value,
          listname: "AnyDepartment"
        })
        .then(response => {
          if (response && response.data) {
                     currentArr  = response.data
            );
          }
        })
        .catch(error => {
          this.loadingShow = false;
          console.log(error);
        });
      if (this.fristCategory[0] && this.fristCategory[0].length) {
        this.selectArr = [this.fristCategory[0][0].label]; //类目默认赋值
        this.category = this.fristCategory[0][0].label; //选择的类目命默认赋值
      }
return  currentArr     
}

----------------------------------------------------------------------------------

求下题运行结果

async function async1(){
			console.log('async1 start');
			
			await async2();
			
			console. log('async1 end');
			}
			
			
			async function async2(){
			console.log('async2');
			}
			
			console. log(' script start');
			
			setTimeout( function() {
			console.log('setTimeout');
			}, 0)
			
			async1();
			new Promise( function(resolve) {
			console.log(' promisel');
			resolve();
			} ).then( function() {
			console.log(' promise2');
			});
			
			console.log('script end');

共6个人测试结果两种结果
结果一:
在这里插入图片描述
结果二:
在这里插入图片描述

两次结果不同, 其中一人试了两次 出了两个结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值