现在我有一个用来在线投票的 vote 函数,它的用法大概是这样的:
js
vote(url, function(body){ console.log(body); })
现在我想对同一个 url 投 10 次票,于是我就想着这样写:
js
for (var i=0; i < 10; i++) { vote(url, function(body){ console.log(body); }); }
但是失败了,因为它是异步执行的吧,把 i 输出来就知道了,
js
for (var i=0; i < 10; i++) { vote(url, function(body){ console.log(i); console.log(body); }); }
所以要如何才能正确的调用这个函数 10 次呢?尝试了很多搜索比如node call a asynchronous function n times
还是没有找到想要的结果,用 forEach 之类的也不行。
补充:这个确实执行了 10 次,好像问题不出在这里,应该是投票请求太频繁了被限制了,我再去调查一下,谢谢各位。
JavaScript 用户要好好学习呀。
首先呢,你没有明确地要求是一个接一个地投票,还是并发投票。并发投票的话,你的代码应该能够正常工作,不知道你为何认为它失败了。你的代码应当会输出 body 10 次,也会输出 10 次
i
的值——它们大概会都是10
。如果你想要输出0 1 2 3 4 5 6 7 8 9
,请在本站搜索「JavaScript 闭包」(鉴于本站的搜索功能比较弱,你最好还是用 Google 搜索,使用「site:segmentfault.com」限定一下就可以了)。其次呢,如果你想一个接一个地投票,需要一点技巧(将次数信息通过参数传递)。如果你学习过函数式编程应该很容易想到。鉴于你没有明确地要求,我就不费时写示例代码了。
最后呢,提问时建议尽量使用别人能够运行并复现问题的例子,这样子对双方都比较省力。