百科狗-知识改变命运!
--

AsyncFunction - JavaScript Generator 对象

乐乐1年前 (2023-11-21)阅读数 28#技术干货
文章标签函数

AsyncFunction

AsyncFunction构造函数用来创建新的异步函数对象。JavaScript 中每个异步函数都是AsyncFunction对象。

注意,AsyncFunction不是全局对象,需要通过下面的方法来获取:

const AsyncFunction = (async function () {}).constructor;


语法

new AsyncFunction(functionBody)
new AsyncFunction(arg0, functionBody)
new AsyncFunction(arg0, arg1, functionBody)
new AsyncFunction(arg0, arg1, /* … ,*/ argN, functionBody)

AsyncFunction(functionBody)
AsyncFunction(arg0, functionBody)
AsyncFunction(arg0, arg1, functionBody)
AsyncFunction(arg0, arg1, /* … ,*/ argN, functionBody)

备注:调用AsyncFunction()时可以选择使用或不使用new运算符。两者都会创建一个新的AsyncFunction实例。


参数

argN可选

函数的参数名,它们必须是符合 JavaScript 参数规范(任何标识符、剩余参数或解构参数,以及可选的默认参数值)的字符串。

由于参数的解析方式与函数声明相同,参数中接受空格和注释。例如:"x","theValue = 42","[a, b]/* numbers */""x, theValue = 42,[a, b]/* numbers */"。("x, theValue = 42","[a, b]"也是正确的,但这容易造成困扰。)

functionBody

包含 JavaScript 语句的字符串,这些语句组成了新函数的定义。


描述

执行AsyncFunction构造函数的时候,会创建一个异步函数对象。但是这种方式不如使用async function表达式定义一个异步函数,然后再调用它来的高效,因为后者的函数是与其它代码一起被解释器解析的。

传递给函数的所有参数(除了最后一个)都会成为新函数中的变量,变量的名称和定义顺序与各参数相同。

AsyncFunction - JavaScript Generator 对象

备注:AsyncFunction构造函数创建的异步函数并不会在当前上下文中创建闭包,其作用域始终是全局的。

因此运行的时候只能访问它们自己的局部变量和全局变量,而不能访问AsyncFunction构造函数被调用的那个作用域中的变量。

这是它与使用eval来创建异步函数表达式不同的地方。

调用AsyncFunction构造函数时可以省略new,其效果是一样的。


示例

通过 AsyncFunction()构造函数创建一个异步函数

function resolveAfter2Seconds(x) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

const AsyncFunction = (async function () {}).constructor;

const fn = new AsyncFunction(
  'a',
  'b',
  'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);',
);

fn(10, 20).then((v) => {
  console.log(v); // 4 秒后打印 30
});

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)