2015-07-02 15 views
5

Tôi muốn thực hiện một cuộc gọi lại khi foreach đã hoàn tất, nhưng nó không hoạt động đúng cách. Làm cách nào tôi có thể làm điều đó?Foreach callback khi hoàn thành

var response = []; 
myArray.forEach(function(data) { 
    data.asyncFunction(function(result) { 
     response.push(result); 
    }); 
}, function() { 
    console.log(response); // Not being called. 
}); 

console.log(response); // (Empty) Executed before foreach finish. 
+0

Bạn đang làm bất kỳ hành động không đồng bộ trong 'forEach'? – thefourtheye

+0

* "// (Empty) Đã thực thi trước khi kết thúc foreach." * Giả định không chính xác. Các forEach là trong thực tế hoàn thành. bạn đang chẩn đoán sai vấn đề. Vui lòng cung cấp thêm ngữ cảnh cho câu hỏi của bạn. –

+0

@thefourtheye tôi thay đổi nội dung bởi vì tôi đang sử dụng một chức năng không đồng bộ bên trong foreach tôi. –

Trả lời

5

Bởi vì chỉ có một forEachcallback chấp nhận. Kể từ khi bạn đang gọi phương pháp không đồng bộ bên trong forEach bạn cần phải kiểm tra xem tất cả các cuộc gọi asyn hoàn

var response = []; 
myArray.forEach(function(data, index) { 
    data.asyncFunction(function(result) { 
     response.push(result); 
     if(response.length === myArray.length) { 
       //foreach work done 
     } 
    }); 
}); 
+0

Tôi đã chỉnh sửa câu hỏi của mình vì tôi đang sử dụng hàm không đồng bộ bên trong foreach. Bạn có thể vui lòng xem? Cảm ơn. –

+0

Made những thay đổi – Anoop

+1

nếu nó thực sự là không đồng bộ, bạn không thể tin tưởng rằng khi chỉ số cuối cùng được gọi là tất cả chúng đều thực hiện. tốt hơn để so sánh myArray.length với response.length. –

3

Hãy thử điều này:

myArray.forEach(function(element, index, array){ 
    asynchronous(function(data){ 
     if (index === myArray.length - 1) { 
      response.push(data); 
      functionAfterForEach(); 
     } 
    }) 
}); 
+0

'myArray' không thay đổi ... do đó bất cứ khi nào bạn gọi cho chiều dài của nó nó sẽ cho độ dài đúng @Kevin B – gypsyCoder

+1

nhận xét là tất nhiên để lặp ban đầu của câu trả lời của bạn. mặc dù, tôi nghĩ nó vẫn đứng vững. nếu vòng lặp cuối cùng của vòng lặp kết thúc bất kỳ điều gì khác hơn là lần cuối, bạn sẽ gọi lại quá sớm. –

+0

xin lỗi @Kevin B nó là một sai lầm ngớ ngẩn đối với tôi – gypsyCoder

Các vấn đề liên quan