async在干啥?
- async是异步的简写,用来说明这个方法是异步的
- async函数返回一个promise对象
- 如果在async函数中,return一个值,async会把这个值通过promise.resolve()封装成为一个promise对象
- 如果没有返回值,则返回promise.resolve(undefined)
await等啥子?
- await在等一个用async的函数,语法说await在等一个表达式,或是表达式或是promise对象
- 如果await等到的是一个promise对象,await会暂停async后面的代码,先执行async外面的代码,然后把resolve的参数作为await的结果
- 不是一个promise对象,也会堵塞执行,把非promise的表达式,作为await表达式结果
async和await的使用
- promise的链式调用,参数传递比较麻烦
function newData() {
return new Promise(resolve => {
resolve(1);
})
.then(result => console.log(result)) //1
.then(result => {
console.log(result); //undefined
return 2;
})
.then(result => {
console.log(result); //2
throw new Error("err");
})
.then((result) =>{
console.log(result);
}, (err)=>{
console.log(err); //Error: err
return 3;
})
.then((result) => {
console.log(result); //3
})
}
newData();
- 为了简化promise的操作用async和await
function newData(ms) {
return new Promise(resolve => {
setTimeout(resolve, ms);
})
async data2(value,ms) {
await newData(ms);
}
data2('xiaoming',50); //每50ms输出一次xiaoming
}
总结
使用 async / await, 搭配 promise, 可以通过编写形似同步的代码来处理异步流程, 提高代码的简洁性和可读性。
async await 的优点:
- 解决了回调地狱的问题
- 支持并发执行
- 可以添加返回值 return xxx;
- 可以在代码中添加try/catch捕获错误
async是干啥的?
定义异步函数(内部通常有异步操作),返回Promise对象,如果返回Promise,返回return的Promise,否则返回Promise.resolve中的return值
await在等啥?
只能放在async函数中,等待右侧表达式结果,如果是函数则结果就是return值,字符串的话就是字符串
await等到了又要干啥?
阻塞后面的代码,先执行async外部的同步代码,同步代码执行完再回到async内部,拿到运算结果,返回promise的话就等待promise对象,将resolve参数作为表达式的结果,不是promise,直接将表达式作为结果