作者kewang (652公车)
看板Ajax
标题[问题] 关於Closure、callback及IIFE的问题
时间Sun Sep 1 23:24:32 2013
01 var a = "";
02
03 arrFoo.forEach(function(bar){
04 var res = (function(){
05 asyncFunction(function(response){
06 return response;
07 });
08 })();
09
10 a += response;
11 });
12
13 alert(a);
今天一整天都在研究Closure跟IIFE之间的关系,结果还是没有成功。
以上述的code为例,我想要把asyncFunction回传的res全部都并在a里面,
可是无论我有没有加L4跟L8,最後在L13的alert却仍然为空白(就是L1的预设值"")
请问有朋友知道这该如何处理吗?(明天到公司继续啃相关文件)
--
杂七杂八的kewang部落格
http://kewang.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.3.53
※ 编辑: kewang 来自: 220.134.3.53 (09/01 23:24)
1F:推 s25g5d4:你完全理解错误... 09/01 23:25
2F:→ s25g5d4:asyncFunction 的 callback 里改成 a += response 09/01 23:26
3F:→ s25g5d4:另外就是这个response会没有顺序 因为你不能控制非同步 09/01 23:27
4F:→ s25g5d4:函数执行的顺序 09/01 23:27
5F:→ s25g5d4: ^完毕 09/01 23:27
6F:→ kewang:我一开始就是照楼上的这样写,不过L13依旧为空白 09/01 23:40
01 var a = "";
02
03 arrFoo.forEach(function(bar){
04 (function(){
05 asyncFunction(function(response){
06 a += response;
07 });
08 })();
09 });
10
11 alert(a);
一开始的写法是这个样子,结果L11一样是显示为空白 Orz
※ 编辑: kewang 来自: 220.134.3.53 (09/01 23:49)
7F:推 s25g5d4:asyncFunction还没全部跑完阿...加一个 i 当asyncFunction 09/01 23:50
8F:→ s25g5d4:呼叫 callback 的时候 i+1 等到 i === arrFoo.length 09/01 23:50
9F:→ s25g5d4:再 alert(a) 09/01 23:50
10F:推 davidsky:如上所说L13执行时没办法保证asyncFunction已经执行 09/02 01:49
13F:→ davidsky:处理非同步回呼建议用jquery defer 09/02 02:02
15F:→ kewang:感谢楼上,我晚上再来试看看 09/02 13:10
16F:→ kewang:我试过了确实可行,但原本的需求是L11後面还有一大堆要处理 09/02 21:55
17F:→ kewang:的事情,现在看起来就是传一个function到里面去做了 09/02 21:55
18F:推 StephenCurry:如果要这样写, 那alert(a)之前最好加一下保护机制 09/02 21:58
19F:→ StephenCurry:不然很容易遇到传入的变数不是预期的格式 09/02 21:58