既然有了promise 为何还要有async await ? 固然是promise 也不是完美的异步解决方案,而 async await 的写法看起来更加简单且容易理解。promise
async function test() { return "SpongeBob"; } const result = test(); console.log(result);// 获得Promise { 'SpongeBob' } // 居然返回一个Promise 对象
因此,async 函数返回的是一个 Promise 对象。async 函数会返回一个 Promise 对象,若是在函数中 return
一个直接量,async 会把这个直接量经过 Promise.resolve()
封装成 Promise 对象。异步
async 函数返回的是一个 Promise 对象,因此在最外层不能用 await 获取其返回值的状况下,可用.then()
链来处理这个 Promise 对象async
test().then(v => { console.log(v); // 输出 SpongeBob
});
await 在等啥函数
async 函数返回一个 Promise 对象,因此 await 能够用于等待一个 async 函数的返回值——这也能够说是 await 在等 async 函数,但要清楚,它等的实际是一个返回值。注意到 await 不单单用于等 Promise 对象,它能够等任意表达式的结果,因此,await 后面实际是能够接普通函数调用或者直接量的。spa
function get() { return "my"; } async function test() { return Promise.resolve("SpongeBob");
}
async function test() {
const v1 = await get();
const v2 = await test();
console.log(v1, v2);
}
test();
若是它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,而后获得 resolve 的值,做为 await 表达式的运算结果。await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数做为 await 表达式的值,继续执行async function。若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常缘由抛出。另外,若是 await 操做符后的表达式的值不是一个 Promise,则返回该值自己。code