CNode

nodejs for循环把一个i++赋给异步操作函数

问答
Ooyosc发布于10 年前最后回复10 年前10 回复6789 浏览0 收藏

nodejs需要循环把一个i++赋给异步操作函数里面,除了使用匿名函数让for循环先执行后,还有别的什么办法吗? for ( item in result[1]) { (function(item){ listResult[item] = getExpandStr(expandStr, result[1][item], tenantUUID).then(function (resultExpand) { for (var x in resultExpand) { if (resultExpand[x].tag == 'bill') { result[1][item].bills = returnResources.generateBillRetInfo(tenantUUID, resultExpand[x]) } if (resultExpand[x].tag == 'groupMembership') { result[1][item].groupMemberships = returnResources.generateGroupMembershipRetInfo(resultExpand[x]) } } return result[1][item]; }); }(item)); }

查看回复

回复 (10)

O
oyosc#1·10 年前

没人知道吗?

O
oyosc#2·10 年前

有没有人可以告诉我呢

S
shynome#3·10 年前

var改成let

O
oyosc#4·10 年前
引用 shynome把var改成let

@shynome 你没看我问的啥吧?是异步世界所以导致item在result[1][item]里无法获取

C
coordcn#5·10 年前
引用 oyosc@shynome 你没看我问的啥吧?是异步世界所以导致item在result[1][item]里无法获取

@oyosc

@shynome 是理解你的问题的,是你自己没明白你自己提的问题,你的问题跟异步没有关系,ES6之前可怜的js没有块级作用域,只能用自执行函数来模拟(函数作用域)。ES6引入关键词let就是干这个的。

我有一个疑问,干嘛不在var的基础上引入块级作用域,而是引入一个新关键词来解决这个问题?我认为可能会怕混淆,如果在var的基础上引入,还是要用两套代码来区分ES6之前的版本和之后的版本。这样就不如新关键词有区分度了。

O
oyosc#8·10 年前

哈哈,都谢谢

E
elrrrrrrr#9·10 年前

代码块可以用头尾可以用 ``` 包裹一下哟

O
oyosc#10·10 年前

纠正一下,是使用匿名函数得到item变化的值,而不是等其异步完成的时候得到的item是最终值

参与回复
登录后即可参与回复。登录