js async await

既然有了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

  1. async 告诉程序这是一个异步,awiat 会暂停执行async中的代码,等待await 表达式后面的结果,跳过async 函数,继续执行后面代码
  2. async 函数会返回一个Promise 对象,那么当 async 函数返回一个值时,Promise 的 resolve 方法会负责传递这个值;当 async 函数抛出异常时,Promise 的 reject 方法也会传递这个异常值
  3. await  操做符用于等待一个Promise 对象,而且返回 Promise 对象的处理结果(成功把resolve 函数参数做为await 表达式的值),若是等待的不是 Promise 对象,则用 Promise.resolve(xx) 转化
相关文章
相关标签/搜索