async
-
async 是一个关键字,它写在函数前面;此时的函数成为async函数
-
作用:解决异步产生的bug;使异步问题同步化
-
async函数 只要执行,就会返回promise实例对象;不管有没有return
-
如果async函数中return一个结果,那么调用这个函数,结果是一个promise实例,return的结果会作为这个- promise实例的value的值
async function foo(p){ console.log('foo run (p)'); return 1 // promise.[[promiseValue]]中 } var res = foo(1) console.log(res);
-
如果要拿到这个value1值,我们有两种方法,第一种就是promise中的 .then方法
-
.then中回调函数的形参就是async函数中return的这个结果,这样就可以拿到async函数中return的这个结果
// async 函数是同步执行的 async function foo(){ console.log(22222222); return 123 } // 1:通过promise.then获取return返回的值 res.then(data=>{ console.log(data); })
-
第二种方法就是使用await
-
需要注意的是await要放在async函数内,如果你在async函数体之外使用它,它就会抛出一个语法错误。
-
提示你await仅在async函数模块中有效
-
await后面跟的应该是一个promise实例,用res去接收结果,输出就可以拿到。
(async function () { console.log('run'); // 第二种接收函数foo 返回值的方式是 await let res = await foo() console.log(res); }()) async function foo() { console.log('foo run'); return 123 }
-
另外async和await可以用于同步化异步程序,比如说这个,它的底层是异步的,通过promise.then-cal1back形参获取
-
async和await和Promise之间关系是相辅相成的,执行async函数,返回的是Promise对象,await相当于Promise的then