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. c# - 为什么在实现接口(interface)方法时允许虚拟? - 2

    我对接口(interface)有一个特定的查询。默认情况下,接口(interface)方法是抽象的和虚拟的,所以如果我们实现该接口(interface)并在类中给出定义,我们实际上会重写该方法,但是当我们在实现类中再次将方法标记为虚拟时,为什么编译器不考虑我们实际上是想隐藏原来的接口(interface)虚方法。如果我们在基类中有一个虚方法并且派生类再次将该方法标记为虚方法,在这种情况下编译器会警告您隐藏了基类方法,因此如果您有意隐藏基类方法,请使用new.publicinterfaceITestInterface{voidvirtualmethod();//thismethodisb

  2. c# - 什么是 |和 ^ 运算符用于什么? - 2

    这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Whatarebitwiseoperators?最近我发现了一些使用|和^运算符。我猜这些是or和negation运算符。那么这些运算符实际上代表什么?

  3. c# - 使用 LINQ 检查 List<string> 是否包含另一个 List<string> 中的元素 - 2

    如何使用C#中的LINQ检查一个列表是否包含另一个列表中存在的元素?我不想使用for/while循环。所以,如果List1有A、B、C而List2有B、1、2,那么我会返回true。 最佳答案 试试这个:List<string>a=...List<string>b=...varinComon=a.Intersect(b).Any(); 关于c#-使用LINQ检查List<string>是否包含另一个List<string>中的元素,我们在S

  4. c# - 为什么 'using' 提高了 C# 性能 - 2

    在大多数情况下,C#编译器似乎可以自动调用Dispose()。像大多数using模式的情况一样:publicvoidSomeMethod(){...using(varfoo=newFoo()){...}//Fooisn'tuseafterhere(obviously)....}因为foo没有被使用(这是一个非常简单的检测)并且因为它没有作为参数提供给另一个方法(这是一个适用于许多用例并且可以扩展的假设),编译器可以自动并立即调用Dispose(),而无需开发人员要求。这意味着在大多数情况下,如果编译器做了一些聪明的工作,using就毫无用处。IDisposable对我来说似乎低

  5. c# - 为什么 C# 使用 implicit void Main? - 2

    我不明白为什么C#的Main函数在默认情况下是无效的(例如在控制台项目中)。在C和C++中,标准明确规定main必须返回int,使用返回值是有意义的,因为我们可以检查来自外部程序的返回值,并查看C/C++应用程序是成功完成还是遇到错误。所以我的问题是:为什么VisualStudio将Main声明为void?一旦C#控制台应用程序执行完毕,向操作系统返回值的最佳方式是什么? 最佳答案 您可以使用int或void作为返回类型。因此,只需更改它并像在C++中那样返回一个值。为了不让新手迷惑,可能默认为void。

  6. c# - C# 的最佳替代 "On Error Resume Next"是什么? - 2

    如果我为我的C#代码放置空的catchblock,它是否等同于VB.NET的“OnErrorResumeNext”语句。try{C#code;}catch(exception){}我问这个的原因是因为我必须将VB.NET代码转换为C#,旧代码有大约200个“OnErrorResumeNext”语句,尽管我使用的是正确的try{}catch{}在我的新代码中,但是否有更好的选择? 最佳答案 我发现VB程序员经常出于(坏)习惯在代码中乱扔许多OnErrorResumeNext语句。我的建议是从没有抑制的异常开始,然后看看到底是什么破坏了

  7. c# - 如何禁用 ASP.NET 中的下拉列表? - 2

    如何在ASP.NET中禁用DropDownList?代码:<asp:TemplateFieldHeaderText="EffectiveTotalHours"><ItemTemplate><%#Eval("TotalHoursEffect")%></ItemTemplate><EditItemTemplate><asp:DropDownListID="ddlEditTotalHoursEffect"AppendDataBoundItems="true"Dat

  8. c# - C#关键字fixed/unsafe有什么用? - 2

    这个问题在这里已经有了答案:C#Unsafe/FixedCode(7个答案)关闭8年前。C#关键字fixed/unsafe有什么用?例如,C#fixedKeyword(unsafe)usingSystem;classProgram{unsafestaticvoidMain(){fixed(char*value="sam"){char*ptr=value;while(*ptr!='\0'){Console.WriteLine(*ptr);++ptr;}}}}为什么我首先需要修复它?

  9. c# - 为什么我们要实现接口(interface)? - 2

    我们为什么要实现,例如ICloneable或IDisposable。我不是在问ICloneable或IDisposable做什么,但我想了解实现这些接口(interface)的充分理由是什么,而不是仅仅编写一个处理或克隆我们的对象的方法? 最佳答案 使用接口(interface)可以使这些功能的使用保持一致。这样,当另一个类想要/需要使用您的类时,它可以将其作为可克隆的一次性对象来使用,而无需担心您的特定实现细节。 关于c#-为什么我们要实现接口(interface)?,我们在Stack

  10. c# - List<T> 的 XML 序列化 - XML 根 - 2

    关于Stackoverflow(.Net2.0)的第一个问题:所以我试图返回一个包含以下内容的XML列表:publicXmlDocumentGetEntityXml(){StringWriterstringWriter=newStringWriter();XmlDocumentxmlDoc=newXmlDocument();XmlTextWriterxmlWriter=newXmlTextWriter(stringWriter);XmlSerializerserializer=newXmlSerializer(typeof(List<T>));List<T>pa

随机推荐

  1. c# - WinForm 应用程序中的 Microsoft 报表教程 - 2

    我在我的WinForm应用程序项目中使用MicrosoftReport。我在表达式和组甚至过滤器和许多其他方面有问题。我正在寻找MicrosoftReport的完整教程。但我直到现在才找到任何教程。可以你帮我找教程?我找到了this.告诉我你是否更了解。谢谢 最佳答案 创建客户端报告定义文件(RDLC)添加一个名为“RDLC”的文件夹。这将保存我们的RDLC报告。右键单击RDLC文件夹,选择“添加新项目..”并添加“产品”的“RDLC”名称。我们将使用“报告向导”引导我们完成创建RDLC的步骤在下一个对话框中,为数据集命名为“Pro

  2. c# - 如何将焦点设置到 WPF 工具包数据网格的特定单元格 - 2

    我正在使用WPF工具包提供的DataGrid控件来显示产品列表及其OpenStock、描述等。在此DataGrid中,我已将OpenStock列设置为可编辑,其余列不可编辑。当我的这个窗口加载时,我现在想要的是,我想将键盘焦点设置到OpenStock列的第一个单元格,如果可能的话,在编辑模式下。我搜索了2天,最后在这里发布。任何帮助或代码示例都会有所帮助。<my:DataGridAutoGenerateColumns="False"ItemsSource="{Binding}"Margin="2,2,2,55"x:Name="

  3. c# - 如何在 Sharepoint 中查找登录用户? - 2

    我开发了一个必须部署在Sharepoint服务器上的“Web部件”。我需要用户的用户名,该用户已登录Web部件中的共享点服务器。我如何获得该用户名? 最佳答案 以下对我有用:SPWebtheSite=SPControl.GetContextWeb(Context);SPUsertheUser=theSite.CurrentUser;stringstrUserName=theUser.LoginName;并检查this出。 关于c#-如何在Sharepoint中查找登录用户?,我们在Sta

  4. C# - 获取对对象的引用数 - 2

    我正在尝试为我正在编写的小爱好游戏编写一个简单的资源管理器。这个资源管理器需要做的任务之一是卸载未使用的资源。我可以想到用两种方式做到这一点:当一个对象不再需要引用资源,它必须调用资源管理器的方法表示不再使用它;或者当一个对象不再需要引用资源,它只是将其设置为空。然后当要求资源管理器卸载未使用的资源,它得到的引用计数(通过反射?)每个资源。如果引用计数是一个(资源管理器将有对资源的引用),卸载资源。有没有办法在C#中实现第二个解决方案?谢谢。 最佳答案 一些事情。首先,对象不被引用计数;引用计数方案存在循环引用问题,即两个对象相互引

  5. c# - 为什么我们要实现接口(interface)? - 2

    我们为什么要实现,例如ICloneable或IDisposable。我不是在问ICloneable或IDisposable做什么,但我想了解实现这些接口(interface)的充分理由是什么,而不是仅仅编写一个处理或克隆我们的对象的方法? 最佳答案 使用接口(interface)可以使这些功能的使用保持一致。这样,当另一个类想要/需要使用您的类时,它可以将其作为可克隆的一次性对象来使用,而无需担心您的特定实现细节。 关于c#-为什么我们要实现接口(interface)?,我们在Stack

  6. c# - List<T> 的 XML 序列化 - XML 根 - 2

    关于Stackoverflow(.Net2.0)的第一个问题:所以我试图返回一个包含以下内容的XML列表:publicXmlDocumentGetEntityXml(){StringWriterstringWriter=newStringWriter();XmlDocumentxmlDoc=newXmlDocument();XmlTextWriterxmlWriter=newXmlTextWriter(stringWriter);XmlSerializerserializer=newXmlSerializer(typeof(List<T>));List<T>pa

  7. c# - 将计时器添加到 Windows 窗体应用程序 - 2

    我想添加一个计时器而不是一个自动开始的倒计时表格加载。开始时间应为45分钟,一旦结束,即达到0分钟时,表单应终止并显示一条消息。我该怎么做?语言:最好是C#。 最佳答案 更多细节:privatevoidForm1_Load(objectsender,EventArgse){TimerMyTimer=newTimer();MyTimer.Interval=(45*60*1000);//45minsMyTimer.Tick+=newEventHandler(MyTimer_Tick);MyTimer.Start();}privatevo

  8. c# - 在 C# 中更新标签位置? - 2

    我有一个返回值的方法,我希望这个值成为Windows窗体应用程序中标签的新位置。但有人告诉我标签的位置不是变量。objectA是标签的名称。objectA.Location.X=(int)A.position;objectA.Refresh();我该怎么做? 最佳答案 使用Left属性更改Label的X坐标objectA.Left=100; 关于c#-在C#中更新标签位置?,我们在StackOverflow上找到一个类似的问题: https://stackov

  9. c# - 在 if() 中调用方法 - C# - 2

    我有几个方法会根据它们的成功返回bool值,在IF()内部调用这些方法有什么问题吗?//&&makessurethatMethod2()willonlygetcalledifMethod1()returnedtrue,use&tocallbothmethodsif(Method1()&&Method2()){//dostuffifbothmethodsreturnedTRUE}如果Method1()返回FALSE,Method2()不需要触发。如果上面的代码有任何问题,请告诉我。谢谢。编辑:由于代码没有任何问题,我会接受最有信息的答案...添加评

  10. c# - 在 C# 中维护 "clean"using 指令列表有什么好处? - 2

    我知道VS2008和Resharper一样有用于清除using指令的remove和sort功能。除了您的代码“干净”并消除引用将来可能不存在的namespace的问题之外,维护一个“干净”的using指令列表有什么好处?更少的代码?更快的编译时间? 最佳答案 如果您总是只有您需要的using指令,并且总是对它们进行适当的排序,那么当您比较两个版本的代码时,您永远不会看到不相关的更改。此外,如果您有一组简洁的using指令,那么任何查看代码的人都可以通过查看using指令来粗略了解将要使用的内容。