2017-10-06 123 views
0

我想构建一个异步forEach函数,但不幸的是它返回值undefined而不是我所希望的数组的内容。我究竟做错了什么?异步为每个函数返回undefined

function asyncforEach(array, cb) { 
    array.forEach(function(){ 
     setTimeout(cb, 0); 
    }); 
} 

asyncforEach([1,2,3,4], function(i) { 
    console.log(i) 
}); 
+0

为什么你期望从阵列什么记录?因为你没有向'cb'传递任何参数,'i'是'undefined'。 – Xufox

回答

3

传递变量(value)回调,在setTimeout

function asyncforEach(array, cb) { 
 
    array.forEach(function(value){ // value: The current array entry 
 
    setTimeout(cb, 0, value); // Pass it to the callback when setTimeout invokes it. 
 
    }); 
 
} 
 
    
 
asyncforEach([1,2,3,4], function(i) { 
 
    console.log(i) 
 
});

传递给setTimeoutfunctiondelay参数之后的任何参数,传递给回调:

var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]); 
2

你错过了获得在forEach功能参数item,并通过该项目进入setTimeout,又拨打了cb函数传入数组元素进去。这将强制在箭头函数内调用cb函数,当时间结束时。

function asyncforEach(array, cb) { 
 
    array.forEach(function(i) { 
 
     //-----------------^--- 
 
     setTimeout(() => cb(i), 0); 
 
     //----------^^^^^^^^^^^---- 
 
    }); 
 
} 
 

 
asyncforEach([1,2,3,4], function(i) { 
 
    console.log(i) 
 
});

+0

请解释downvote –

+0

谢谢!这是有道理的 –

+0

你不需要在那里添加箭头功能。 – Cerbrus