美文网首页
async 和 await

async 和 await

作者: SingleDiego | 来源:发表于2019-08-23 14:07 被阅读0次

参考原文:https://segmentfault.com/a/1190000007535316
同时参考:http://www.ruanyifeng.com/blog/2015/05/async.html




async 起什么作用

首先我们看看 async 函数的返回值是什么:

const testAsync = async () => {
  return "hello";
}

const result = testAsync();
console.log(result);

// 输出
// Promise { 'hello' }

可见 async 的返回值是一个 Promise 对象。

async 函数(包含函数语句、函数表达式、Lambda 表达式)会返回一个 Promise 对象,如果在函数中 return 一个直接量,async 会把这个直接量通过 Promise.resolve() 封装成 Promise 对象。

既然 async 返回一个 Promise 对象,我们来通过 then 函数查看下:

const testAsync = async () => {
  return "hello";
}

const result = testAsync();

result.then((data) => {
  console.log(data)
})

// 输出
// hello

如果 async 函数没有返回值,它会返回 Promise.resolve(undefined)

const testAsync = async () => {}

const result = testAsync();
console.log(result);

// Promise { undefined }

在没有 await 的情况下执行 async 函数,它会立即执行,返回一个 Promise 对象,并且不会阻塞后面的语句。

const testAsync = async () => {
  setTimeout(() => {
    console.log('hello');
  }, 100);
}

testAsync();
console.log('world');

// 输出
// world
// hello

可见使用了 setTimeoutasync 的函数并不会阻塞后面语句的执行。

这和普通返回 Promise 对象的函数并无二致。那么下一个关键点就在于 await 关键字的作用了。




await 的作用

await 顾名思义是 async wait,等待异步操作的完成。如果它等到的是一个 Promise 对象,await 就会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

const takeLongTime = () => {
  return new Promise(resolve => {
    setTimeout(() => resolve("hello"), 1000);
  });
}

const test = async () => {
  console.log(await takeLongTime());
  console.log('world');
}

test();

// 输出
// hello
// world




错误处理

await 关键字后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在 try...catch 代码块中。

async function myFunction() {
  try {
    await somethingThatReturnsAPromise();
  } catch (err) {
    console.log(err);
  }
}

相关文章

  • async和await

    浅谈Async/Await用 async/await 来处理异步 async和await async:声明一个异步...

  • ES8(一) —— async&await

    目录 async和普通函数的区别 await async/await处理多回调异步 async和await必须配合...

  • ES6中的好东西

    1 Await/Async 前端的回调时代我没有赶上,我赶上的是await/async时代。await和async...

  • 使用 async 和 await,实现 fetch 同步请求

    使用 async 和 await,实现 fetch 同步请求 关于 async 和 await 的介绍https:...

  • ES2017 async 函数

    async 和 await 在干什么 每个名称都有意义async : 异步await: async wait简...

  • async-await

    一、async-await和Promise的关系 async-await是promise和generator的语法...

  • 小程序-云开发

    async和await async:异步(无等待)await:等待(是为了同步) 一、await 关键字只在 as...

  • async / await

    async / await 优缺点 async 和 await 相比直接使用 Promise 来说,优势在于处理 ...

  • flutter中compute和isolate

    async和await:对于普通的任务,使用async和await可实现异步处理任务,而async的处理方式并非使...

  • Promise 执行顺序

    使用 async 和 await

网友评论

      本文标题:async 和 await

      本文链接:https://www.haomeiwen.com/subject/egazsctx.html