nodejs for循环把一个i++赋给异步操作函数
发布于 9 年前 作者 oyosc 6088 次浏览 最后一次编辑是 8 年前 来自 问答

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 回复

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

没人知道吗?

有没有人可以告诉我呢

var改成let

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

@oyosc

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

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

@coordcn 你现在说的我就明白了…,开始那个太简单了,不过还是谢谢你

哈哈,都谢谢

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

回到顶部