资讯专栏INFORMATION COLUMN

Hack 的异步特性 async 和 await

Codeing_ls / 2567人阅读

摘要:异步编程是一种编程的设计模式。异步编程最常用于读写。使用和两个关键词支持异步编程。异步函数可能会贪婪地执行异步函数体部分。在声明以外的执行不会被挂起。异步编程框架会记录所有应该完成的异步操作。

异步编程是一种编程的设计模式。它允许多个独立的任务协同工作,在同一线程内传递控制权。从最小依赖和任务交互的角度来看,这些任务是相互独立的。异步编程最常用于I/O读写。

Hack使用asyncawait两个关键词支持异步编程。async声明异步函数。await会挂起一个异步函数的执行,直到await代表的异步操作的结果可以访问。await可以使用的函数的返回值为实现了Awaitable的对象。

 {
  if ($a === 0) {
    return null;
  }

  $bar = await gen_bar($a);
  if ($bar !== null) {
    return $bar->getFoo();
  }

  return null;
}

async function gen_bar(int $a): Awaitable {
  if ($a === 0) {
    return null;
  }

  return new Bar();
}


gen_foo(4);

gen_foo()前有async关键字,因此它是一个异步函数。异步函数总是返回一个实现了Awaitable的对象(通常具体的实现是WaitHandle,不过几乎在所有场合都推荐使用Awaitable接口。

调用gen_foo()会引入一些有趣的属性,这些都是异步函数特有的。异步函数可能会贪婪地执行异步函数体部分。调用gen_bar()首先返回一个Awaitable对象,这个对象在执行之中可能完成,也可能不完成。如果它没有完成,那么gen_foo()会挂起执行,否则gen_foo()会析构结果并继续贪婪执行。在await声明以外的执行不会被挂起。异步编程框架会记录所有应该完成的异步操作。


原文 Hack Language Reference -- async and await
翻译 SegmentFault

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20705.html

相关文章

  • ES6 系列之我们来聊聊 Async

    摘要:标准引入了函数,使得异步操作变得更加方便。在异步处理上,函数就是函数的语法糖。在实际项目中,错误处理逻辑可能会很复杂,这会导致冗余的代码。的出现使得就可以捕获同步和异步的错误。如果有错误或者不严谨的地方,请务必给予指正,十分感谢。 async ES2017 标准引入了 async 函数,使得异步操作变得更加方便。 在异步处理上,async 函数就是 Generator 函数的语法糖。 ...

    Songlcy 评论0 收藏0
  • ES67个实用技巧

    摘要:交换元素利用数组解构来实现值的互换调试我们经常使用来进行调试,试试也无妨。提供了完整的环境,并且支持自定义域名指向,动态计算资源调整,可以完成各种应用的开发编译与部署。 7 Hacks for ES6 Developers Hack #1 交换元素 利用数组解构来实现值的互换 let a = world, b = hello [a, b] = [b, a] console.log(a...

    CastlePeaK 评论0 收藏0
  • ES6 Async/Await 完爆Promise6个原因

    摘要:以往的异步方法无外乎回调函数和。当然,对这个新特性也有一定的担心,体现在他使得异步代码变的不再明显,我们好不容易已经学会并习惯了使用回调函数或者来处理异步。 自从Node的7.6版本,已经默认支持async/await特性了。如果你还没有使用过他,或者对他的用法不太了解,这篇文章会告诉你为什么这个特性不容错过。本文辅以大量实例,相信你能很轻松的看懂,并了解Javascript处理异步的...

    shevy 评论0 收藏0
  • ES6 Async/Await 完爆Promise6个原因

    摘要:以往的异步方法无外乎回调函数和。当然,对这个新特性也有一定的担心,体现在他使得异步代码变的不再明显,我们好不容易已经学会并习惯了使用回调函数或者来处理异步。 自从Node的7.6版本,已经默认支持async/await特性了。如果你还没有使用过他,或者对他的用法不太了解,这篇文章会告诉你为什么这个特性不容错过。本文辅以大量实例,相信你能很轻松的看懂,并了解Javascript处理异步的...

    W4n9Hu1 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<