已被阅读 1192 次 | 文章分类:javascript | 2021-02-12 13:56
下面文章有两块内容,第一 async和await关键词存在的意义及使用方式 第二 axync和await的返回值是什么;小编我只是带大家了解基本的使用方法;若有更深入或者高级用法,大家可自行搜索;
一 async和await存在的意义及使用方式
promise对象最大的一个优点是可以将异步函数同步化,即利用一个链式执行函数 then;可以实现将多个异步串联同步执行,执行一个异步后(为了获取结果后接着使用)再执行下一个异步;但是then是把双刃剑;如果链式执行次数不多,比如有两三个等,可以接受;如果有多个那代码太难维护了;像下面:
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('500ms后输出 xiao');
resolve('xiao');
}, 500);
})
.then(res => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('200ms后输出 bai');
resolve(res + 'bai');
});
}, 200);
})
.then(res => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log('100ms后输出 gis');
resolve(res + 'gis');
}, 100);
});
})
.then(res => {
console.log('结果', res);
});
上面简单用三个then函数做介绍;可以看出promise可以将异步函数同步输出;但是无限的then函数,会导致函数维护很困难; async和await是配合使用的;await结合peomise可以将异步函数同步化;这样避免promise有过多then函数的问题;
async function test() {
let v1 = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve('500ms后输出 xiao');
}, 500);
});
console.log(v1);
let v2 = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve('200ms后输出 xiaobai');
}, 200);
});
console.log(v2);
let v3 = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve('100ms后输出 xiaobaigis');
}, 100);
});
console.log(v3);
}
test();
可以看到都then函数和await作用都可以实现异步函数同步串联化;即500ms后再执行200ms,200ms后再执行100ms;但是await的方式,在多个异步的时候,会相当方便也很好维护
二 async和await的返回内容是什么
其实通过上面的例子,大家应该清楚了 await的返回值就是 resolve()函数的参数内容;参数内容可以是值类型也可以是对象等等;
async function test() {
let v1 = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve('500ms后输出 xiao');
}, 500);
});
console.log(v1);
}
test();// '500ms后输出 xiao'
async function test() {
let v1 = await new Promise((resolve, reject) => {
setTimeout(() => {
let value = {
name: 'xiaobaigis'
};
resolve(value);
}, 500);
});
console.log(v1);
}
test(); // {name: "xiaobaigis"}
async的返回值是什么呢
async function test() {
let v1 = await new Promise((resolve, reject) => {
setTimeout(() => {
let value = {
name: 'xiaobaigis'
};
resolve(value);
}, 500);
});
console.log(v1);
}
console.log(test());//返回一个promise对象
QQ:3410192267 | 技术支持 微信:popstarqqsmall
Copyright ©2017 xiaobaigis.com . 版权所有 鲁ICP备17027716号