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/
我知道更改数组大小的通用方法是使用.push()。然而,今天我在angularJS中看到了一段代码,它做了这样的事情:varservice={pages:[],doSmth:doSmth};doSmth();functiondoSmth(){service.pages[1]="abc";service.pages[5]="def";}我在浏览器上运行调试器,发现在doSmth()被调用之前,pages[1]是未定义的,但是在那之后,pages[1]被赋值,没有任何错误。这怎么可能? 最佳答案 这正是J
这个问题在这里已经有了答案:HowtoconvertastringtoanintegerinJavaScript(32个答案)关闭7年前。我有一个在其中存储innerHTML文本的变量vartext=document.getElementById("textID").innerHTML;//<--textIDisactuallyanumber“文本”实际上只是一个数字,但我猜javascript仍然认为它是一个字符串。我想给变量文本加+1,但它只是加了一个新字母而不是增加数字例如:0+1=01-->01+1=011等等...这是我试过的代码:text=text+1
我目前有一个基本的“选项卡”Ionic/Angular应用程序。ionic启动测试项目选项卡我已经完成了npminstall以在项目目录中获取一些基本Node模块。对于如何同时使用Angular和Express,以及如何设置Node/服务器端,我有些困惑。我尝试查看了很多教程,发现自己有点迷失在其中,所以我希望有人能提供一些资源,帮助我朝着正确的方向前进。因为Angular和Express都执行MVC/MV*——它开始真正混淆什么做什么。我对设置以及如何让他们一起交谈感到困惑。请让我知道我可以提供哪些其他信息,因为我不确定还有什么。(该项目非常简单。)非常感谢!
如何在Bootstrap-select中动态选择有多个值,如果我的值是1、3、4,使用jQuery?这是我的选择:<selectid="myselect"name="myselect[]"multiple><optionvalue=""></option><optionvalue="1">red</option><optionvalue="2">orange</option><optionvalue="3
我有以下类(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”属
在控制台中,我的代码正在打印:[Object,Object]我无法正常向下钻取。我尝试了JSON.Parse和JSON.stringify但没有成功。我设置凭据的服务:setCredentials.js'usestrict';//servicethathandlessettingandgettingcookiesapp.service('setCredentials',function($cookies){//functionthatgetsjsonobjectandstoresitinsideacookiethis.storeInCookie=func
我是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
尝试使用最新版本(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&
我使用websockets和vuejs构建了一个网络应用程序。在DOM中,我想遍历vuejs处理的数据。然而,在建立websocket连接并接收到数据后,数据会在时间线的后面设置。到那时(大约0.5秒),您可以在网站本身上看到vuejs的mustache代码,然后看到它闪烁并添加真实数据。当从websocket连接接收数据时,我创建了ViewModel,如下所示:onMessage:function(e){newVue({el:'#messages',data:{messages:e.data}});}我已经尝试过在页面加载时初始化ViewModel,然后设置数据:va
正在为一些即将开展的项目构建基础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
我知道更改数组大小的通用方法是使用.push()。然而,今天我在angularJS中看到了一段代码,它做了这样的事情:varservice={pages:[],doSmth:doSmth};doSmth();functiondoSmth(){service.pages[1]="abc";service.pages[5]="def";}我在浏览器上运行调试器,发现在doSmth()被调用之前,pages[1]是未定义的,但是在那之后,pages[1]被赋值,没有任何错误。这怎么可能? 最佳答案 这正是J
这个问题在这里已经有了答案:HowtoconvertastringtoanintegerinJavaScript(32个答案)关闭7年前。我有一个在其中存储innerHTML文本的变量vartext=document.getElementById("textID").innerHTML;//<--textIDisactuallyanumber“文本”实际上只是一个数字,但我猜javascript仍然认为它是一个字符串。我想给变量文本加+1,但它只是加了一个新字母而不是增加数字例如:0+1=01-->01+1=011等等...这是我试过的代码:text=text+1
我目前有一个基本的“选项卡”Ionic/Angular应用程序。ionic启动测试项目选项卡我已经完成了npminstall以在项目目录中获取一些基本Node模块。对于如何同时使用Angular和Express,以及如何设置Node/服务器端,我有些困惑。我尝试查看了很多教程,发现自己有点迷失在其中,所以我希望有人能提供一些资源,帮助我朝着正确的方向前进。因为Angular和Express都执行MVC/MV*——它开始真正混淆什么做什么。我对设置以及如何让他们一起交谈感到困惑。请让我知道我可以提供哪些其他信息,因为我不确定还有什么。(该项目非常简单。)非常感谢!
如何在Bootstrap-select中动态选择有多个值,如果我的值是1、3、4,使用jQuery?这是我的选择:<selectid="myselect"name="myselect[]"multiple><optionvalue=""></option><optionvalue="1">red</option><optionvalue="2">orange</option><optionvalue="3
我有以下类(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”属
在控制台中,我的代码正在打印:[Object,Object]我无法正常向下钻取。我尝试了JSON.Parse和JSON.stringify但没有成功。我设置凭据的服务:setCredentials.js'usestrict';//servicethathandlessettingandgettingcookiesapp.service('setCredentials',function($cookies){//functionthatgetsjsonobjectandstoresitinsideacookiethis.storeInCookie=func
我是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
尝试使用最新版本(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&
我使用websockets和vuejs构建了一个网络应用程序。在DOM中,我想遍历vuejs处理的数据。然而,在建立websocket连接并接收到数据后,数据会在时间线的后面设置。到那时(大约0.5秒),您可以在网站本身上看到vuejs的mustache代码,然后看到它闪烁并添加真实数据。当从websocket连接接收数据时,我创建了ViewModel,如下所示:onMessage:function(e){newVue({el:'#messages',data:{messages:e.data}});}我已经尝试过在页面加载时初始化ViewModel,然后设置数据:va
正在为一些即将开展的项目构建基础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