TOGOUTECH

javascript - (异步 () => { })();这是什么?

coder 2024-05-16 原文

async function test() {
  (async () => {            
    var a = await this.test1();
    var b = await this.test2(a);
    var c = await this.test3(b);  
    this.doThis(a,b,c);                              
  })();
}

将方法 (test1,test2,test3) 放在 async () => {})() 中是什么意思? 我发现它比

async function test() {          
  var a = await this.test1();
  var b = await this.test2(a);
  var c = await this.test3(b);  
  this.doThis(a,b,c); 
}

使用它有什么缺点吗?

最佳答案

两者都返回一个 promise ,但他们返回不同的 promise 。

第一个将返回一个可能在 this.test1() 的结果解析之前解析的 promise 。

第二个返回一个只在最终调用 this.doThis(a,b,c); 之后解析的 promise 。

这被称为“fire and forget pattern”:

Often in application development you want a process to call another thread and continue the process flow, without waiting for a response from the called thread. This pattern is called the “fire and forget” pattern.

你可以在

中看到这个

function logEventually(str) {
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log(str);
      resolve(null);
    }, 0);
  });
}

async function a() {
  await logEventually('in a 1');
  await logEventually('in a 2');
  await logEventually('in a 3');
  return await logEventually('end of a');
}

async function b() {
  (async () => {
    await logEventually('in b 1');
    await logEventually('in b 2');
    await logEventually('in b 3');
  })();
  return await logEventually('end of b');
}

a();
b();

关于javascript - (异步 () => { })();这是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013440/

有关javascript - (异步 () => { })();这是什么?的更多相关文章

  1. javascript - 通过仅添加元素而不推送 javascript 来更改数组大小 - 2

    我知道更改数组大小的通用方法是使用.push()。然而,今天我在angularJS中看到了一段代码,它做了这样的事情:varservice={pages:[],doSmth:doSmth};doSmth();functiondoSmth(){service.pages[1]="abc";service.pages[5]="def";}我在浏览器上运行调试器,发现在doSmth()被调用之前,pages[1]是未定义的,但是在那之后,pages[1]被赋值,没有任何错误。这怎么可能? 最佳答案 这正是J

  2. Javascript 添加 +1 到字符串 - 2

    这个问题在这里已经有了答案:HowtoconvertastringtoanintegerinJavaScript(32个答案)关闭7年前。我有一个在其中存储innerHTML文本的变量vartext=document.getElementById("textID").innerHTML;//<--textIDisactuallyanumber“文本”实际上只是一个数字,但我猜javascript仍然认为它是一个字符串。我想给变量文本加+1,但它只是加了一个新字母而不是增加数字例如:0+1=01-->01+1=011等等...这是我试过的代码:text=text+1

  3. javascript - 我如何将 Node.js 实现到 Ionic/Angular 应用程序中? - 2

    我目前有一个基本的“选项卡”Ionic/Angular应用程序。ionic启动测试项目选项卡我已经完成了npminstall以在项目目录中获取一些基本Node模块。对于如何同时使用Angular和Express,以及如何设置Node/服务器端,我有些困惑。我尝试查看了很多教程,发现自己有点迷失在其中,所以我希望有人能提供一些资源,帮助我朝着正确的方向前进。因为Angular和Express都执行MVC/MV*——它开始真正混淆什么做什么。我对设置以及如何让他们一起交谈感到困惑。请让我知道我可以提供哪些其他信息,因为我不确定还有什么。(该项目非常简单。)非常感谢!

  4. javascript - 如何在具有多个值的 Bootstrap-select 中动态选择 - 2

    如何在Bootstrap-select中动态选择有多个值,如果我的值是1、3、4,使用jQuery?这是我的选择:<selectid="myselect"name="myselect[]"multiple><optionvalue=""></option><optionvalue="1">red</option><optionvalue="2">orange</option><optionvalue="3

  5. javascript - 有人可以用对象解释奇怪的 JavaScript 吗? - 2

    我有以下类(class)functionTemp(){varisHot=false;return{setHot:function(v){isHot=v},getHot:function(){returnisHot;},hot:isHot}}varw=newTemp();w.setHot(true);w.hot!==w.getHot()为什么只有通过函数访问w对象才能看到更改后的值? 最佳答案 返回对象的属性“hot”在创建对象时被初始化,但它的值是“isHot”值的副本。随后对局部(闭包)变量“isHot”的更改不会影响“hot”属

  6. javascript - 将 json 对象添加到 $cookies - Angular JS - 2

    在控制台中,我的代码正在打印:[Object,Object]我无法正常向下钻取。我尝试了JSON.Parse和JSON.stringify但没有成功。我设置凭据的服务:setCredentials.js'usestrict';//servicethathandlessettingandgettingcookiesapp.service('setCredentials',function($cookies){//functionthatgetsjsonobjectandstoresitinsideacookiethis.storeInCookie=func

  7. javascript - 结合两个 promise - 2

    我是JavaScript和promises的新手,老实说,我并不完全理解promises是如何工作的,所以我需要一些帮助。我正在使用GoogleCloudMessaging将通知从我的网站推送给我的用户。当用户收到通知并点击它时,它会打开一个存储在IndexedDB中的URL。importScripts('IndexDBWrapper.js');varKEY_VALUE_STORE_NAME='key-value-store',idb;functiongetIdb(){if(!idb){idb=newIndexDBWrapper(KEY_VALUE_ST

  8. javascript - AngularJS ng-options 将数据类型添加到选项的值 - 2

    尝试使用最新版本(1.5.8)的AngularJS和ng-options来填充下拉列表。问题是它添加了数据类型和值,如下所示:<selectclass="possedetailng-validng-dirtyng-valid-parseng-touched"ng-model="Province"ng-options="paspforpinprovList"><optionvalue="string:ALBERTA"label="ALBERTA">ALBERTA</option&

  9. javascript - websocket + vuejs : screen flickering, 可见 mustache 代码 - 2

    我使用websockets和vuejs构建了一个网络应用程序。在DOM中,我想遍历vuejs处理的数据。然而,在建立websocket连接并接收到数据后,数据会在时间线的后面设置。到那时(大约0.5秒),您可以在网站本身上看到vuejs的mustache代码,然后看到它闪烁并添加真实数据。当从websocket连接接收数据时,我创建了ViewModel,如下所示:onMessage:function(e){newVue({el:'#messages',data:{messages:e.data}});}我已经尝试过在页面加载时初始化ViewModel,然后设置数据:va

  10. javascript - Grunt 任务陷入无限循环 - 2

    正在为一些即将开展的项目构建基础Gruntfile.js。从一台新电脑开始,一切都是全新的。使用Homebrew安装了Node和NPM,然后在全局以及我的本地目录中安装了Grunt。这是我的package.json:{"name":"timespent-prototype","version":"0.1.0","devDependencies":{"assemble":"0.4.37","bower":"^1.4.1","grunt&#

随机推荐

  1. javascript - 通过仅添加元素而不推送 javascript 来更改数组大小 - 2

    我知道更改数组大小的通用方法是使用.push()。然而,今天我在angularJS中看到了一段代码,它做了这样的事情:varservice={pages:[],doSmth:doSmth};doSmth();functiondoSmth(){service.pages[1]="abc";service.pages[5]="def";}我在浏览器上运行调试器,发现在doSmth()被调用之前,pages[1]是未定义的,但是在那之后,pages[1]被赋值,没有任何错误。这怎么可能? 最佳答案 这正是J

  2. Javascript 添加 +1 到字符串 - 2

    这个问题在这里已经有了答案:HowtoconvertastringtoanintegerinJavaScript(32个答案)关闭7年前。我有一个在其中存储innerHTML文本的变量vartext=document.getElementById("textID").innerHTML;//<--textIDisactuallyanumber“文本”实际上只是一个数字,但我猜javascript仍然认为它是一个字符串。我想给变量文本加+1,但它只是加了一个新字母而不是增加数字例如:0+1=01-->01+1=011等等...这是我试过的代码:text=text+1

  3. javascript - 我如何将 Node.js 实现到 Ionic/Angular 应用程序中? - 2

    我目前有一个基本的“选项卡”Ionic/Angular应用程序。ionic启动测试项目选项卡我已经完成了npminstall以在项目目录中获取一些基本Node模块。对于如何同时使用Angular和Express,以及如何设置Node/服务器端,我有些困惑。我尝试查看了很多教程,发现自己有点迷失在其中,所以我希望有人能提供一些资源,帮助我朝着正确的方向前进。因为Angular和Express都执行MVC/MV*——它开始真正混淆什么做什么。我对设置以及如何让他们一起交谈感到困惑。请让我知道我可以提供哪些其他信息,因为我不确定还有什么。(该项目非常简单。)非常感谢!

  4. javascript - 如何在具有多个值的 Bootstrap-select 中动态选择 - 2

    如何在Bootstrap-select中动态选择有多个值,如果我的值是1、3、4,使用jQuery?这是我的选择:<selectid="myselect"name="myselect[]"multiple><optionvalue=""></option><optionvalue="1">red</option><optionvalue="2">orange</option><optionvalue="3

  5. javascript - 有人可以用对象解释奇怪的 JavaScript 吗? - 2

    我有以下类(class)functionTemp(){varisHot=false;return{setHot:function(v){isHot=v},getHot:function(){returnisHot;},hot:isHot}}varw=newTemp();w.setHot(true);w.hot!==w.getHot()为什么只有通过函数访问w对象才能看到更改后的值? 最佳答案 返回对象的属性“hot”在创建对象时被初始化,但它的值是“isHot”值的副本。随后对局部(闭包)变量“isHot”的更改不会影响“hot”属

  6. javascript - 将 json 对象添加到 $cookies - Angular JS - 2

    在控制台中,我的代码正在打印:[Object,Object]我无法正常向下钻取。我尝试了JSON.Parse和JSON.stringify但没有成功。我设置凭据的服务:setCredentials.js'usestrict';//servicethathandlessettingandgettingcookiesapp.service('setCredentials',function($cookies){//functionthatgetsjsonobjectandstoresitinsideacookiethis.storeInCookie=func

  7. javascript - 结合两个 promise - 2

    我是JavaScript和promises的新手,老实说,我并不完全理解promises是如何工作的,所以我需要一些帮助。我正在使用GoogleCloudMessaging将通知从我的网站推送给我的用户。当用户收到通知并点击它时,它会打开一个存储在IndexedDB中的URL。importScripts('IndexDBWrapper.js');varKEY_VALUE_STORE_NAME='key-value-store',idb;functiongetIdb(){if(!idb){idb=newIndexDBWrapper(KEY_VALUE_ST

  8. javascript - AngularJS ng-options 将数据类型添加到选项的值 - 2

    尝试使用最新版本(1.5.8)的AngularJS和ng-options来填充下拉列表。问题是它添加了数据类型和值,如下所示:<selectclass="possedetailng-validng-dirtyng-valid-parseng-touched"ng-model="Province"ng-options="paspforpinprovList"><optionvalue="string:ALBERTA"label="ALBERTA">ALBERTA</option&

  9. javascript - websocket + vuejs : screen flickering, 可见 mustache 代码 - 2

    我使用websockets和vuejs构建了一个网络应用程序。在DOM中,我想遍历vuejs处理的数据。然而,在建立websocket连接并接收到数据后,数据会在时间线的后面设置。到那时(大约0.5秒),您可以在网站本身上看到vuejs的mustache代码,然后看到它闪烁并添加真实数据。当从websocket连接接收数据时,我创建了ViewModel,如下所示:onMessage:function(e){newVue({el:'#messages',data:{messages:e.data}});}我已经尝试过在页面加载时初始化ViewModel,然后设置数据:va

  10. javascript - Grunt 任务陷入无限循环 - 2

    正在为一些即将开展的项目构建基础Gruntfile.js。从一台新电脑开始,一切都是全新的。使用Homebrew安装了Node和NPM,然后在全局以及我的本地目录中安装了Grunt。这是我的package.json:{"name":"timespent-prototype","version":"0.1.0","devDependencies":{"assemble":"0.4.37","bower":"^1.4.1","grunt&#