asycn、await

async

用于申明一个 function 是异步的

await

用于等待一个异步方法执行完成,await 只能出现在 async 函数中。


async 函数中如果 return 一个直接量,async

会把这个直接量通过 Promise.resolve() 封装成 Promise

对象;如果没有await关键字,async函数执行和普通函数差不多,唯一区别就是返回值是个promise对象。

要想获取到async 函数的执行结果,就要调用promise的then 或catch来给它注册回调函数。


await

等待的是一个表达式,这个表达式的计算结果是 Promise 对象或者其它值(换句话说,就是没有特殊限定)。

如果它等到的不是一个 Promise

    对象,那 await 表达式的运算结果就是它等到的东西。

如果它等到的是一个 Promise对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

await命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在

try...catch 代码块中。


ps:当js引擎在等待promise

resolve 的时候,它并没有真正的暂停工作,它可以处理其它的一些事情,如果我们在testResult函数(里面有await)的调用后面,console.log 一下,你发现后面console.log的代码先执行。

你可能感兴趣的:(asycn、await)