async
可以作用在任何的方法前, 返回值是一个promise对象;
函数内部return的返回值, 会成为then回调函数的参数
如果函数内部出现错误, 会被then的第二个参数或者catch捕获到
await
只能在async修饰下的方法中出现,普通函数内部直接写会报错
await is only valid in async function
正常情况下 await后面跟的是一个 promise对象, 返回该对象的结果
如果await后面不是promise, 直接返回对应的值
await会阻塞代码执行
let fn0 = async ()=>{};
let arr = [];
arr.map(async (item ,index)=>{});
{
let p1 = ()=> new Promise((resolve, reject)=>resolve("hello"));
function fn() {
p1().then(
res=>{
console.log("step1_1", res);
}
);
console.log("step1_2")
}
fn();
}
{
let p1 = ()=> Promise.resolve("hello");
async function fn() {
let res = await p1();
//感觉像是在写同步代码一样
//await 智能接受resolve的结果.
console.log("step2_1", res);
console.log("step2_2")
}
fn()
}
{
let p1 = ()=> Promise.resolve("hello");
async function fn() {
//即使前面异步操作出现问题,但是不影响代码继续执行
try {
let res = await p1();
console.log("step3_1", res);
}catch (e){//捕获到的错误 e
console.log("step3_2___catch", e)
}
return await 110;
}
fn().then(
res=>{
console.log("step3_then方法", res)
}
)
}