2010-02-23 24 views
7

Bất cứ ai cũng có thể cho tôi biết cách kích hoạt hai (hoặc nhiều) hàm JavaScript AJAX song song?Làm thế nào để kích hoạt hai hàm JavaScript song song?

+3

Bạn đã hỏi câu hỏi này hai lần: http://stackoverflow.com/questions/2312749/ và http://stackoverflow.com/questions/2306334/ –

+1

@ John - Đây không phải là cùng một câu hỏi. Họ trước đây 2 là về chức năng gọi điện thoại với ASP. Đây là một phiên bản đơn giản hơn nhiều của 2 trước đó, tôi nghĩ câu hỏi này sẽ vẫn mở. –

+0

nhưng vấn đề là nó không làm việc song song, một chức năng sau khi chỉ có một ... tôi cần một số điều như hình ảnh ở phía bên dưới liên kết http://piecesofrakesh.blogspot.com/2009/03/downloading-javascript-files-in .html – Alex

Trả lời

0

Đây có phải là những gì bạn đang tìm kiếm không?

setTimeout('JsFunction1(val);', 0); 
setTimeout('JsFunction2(val);', 0); 
+3

Điều này sẽ không thực thi chúng song song. JsFunction1 sẽ luôn luôn thực hiện đầu tiên, không có vấn đề gì. setTimeout 0 chỉ cần đẩy mã vào cuối stack thực thi. –

+1

bạn không thể nhận bất kỳ thứ gì trong JS thực thi tại cùng một thời điểm EXACT nhưng bạn có thể thực thi chúng theo cách "không đồng bộ" (tôi biết JS được đơn luồng nên nó không thực sự không đồng bộ, hoặc ít nhất nó không phải là cho đến khi Chrome xuất hiện). WTF là lên với bạn trolling xung quanh cho bài đăng này hơn hai tuần sau đó để làm cho một bình luận ngẫu nhiên như thế? Ai có loại thời gian đó? – used2could

14

Điều này là không thể. Javascript chỉ có thể làm việc trong một chuỗi duy nhất và không có cách nào để thực sự có hai hàm chạy song song. Bạn cần thực hiện một cuộc gọi và một cuộc gọi khác. Các callbacks trong số này sẽ được gọi (không nhất thiết phải theo cùng thứ tự với các phương thức gọi), khi dữ liệu đã được trả về hoặc một lỗi/timeout xảy ra. Chỉ khi một lần gọi lại hoàn thành, thì lần gọi lại thứ hai sẽ được phép chạy.

Cũng nên nhớ rằng các trình duyệt hạn chế số lượng cuộc gọi ajax hoạt động. Vì vậy, nếu bạn cố gắng thực hiện quá nhiều cuộc gọi ajax, người ta có thể chờ (chặn tất cả mã javascript) cho các cuộc gọi khác để hoàn thành.

+2

Còn http://adambom.github.io/parallel.js/ thì sao? – osa

5

Tìm kiếm người làm việc trên web. Đây là một loại tính năng mới trong trình duyệt hiện đại và có thể không có sẵn trong các trình duyệt cũ.

0

Sử dụng một vài 'setInterval' có thể làm cho chạy song song có thể, mặc dù nó vẫn có thể chạy trên một lõi đơn. Đoạn mã sau là một ví dụ về việc song song một hàm func với một mảng dữ liệu 'dữ liệu'. Để chạy nó, sử dụng Parallel (func, datas) trong đó func là tên hàm toàn cục và dữ liệu của bạn là một mảng dữ liệu, mỗi dữ liệu là một đầu vào cho func.

var i_array=new Array(); 
function Parallel(func,datas){ 
     $(datas).each(function(i,v){ 
      i_array[i]=setInterval(function(){ 
         clearInterval(i_array[i]); 
         window[func](datas[i]); 
         },10); 
      }); 
} 

Đây là jsfiddle test. Dấu thời gian trong các số nguyên cho thấy hai ajax đang chạy song song.

-2

Sử dụng window.open() để gọi một trang mới. Trang đó sẽ gọi hàm js đầu tiên. Sau khi window.open() gọi hàm thứ hai, bạn không phải chờ đợi về chức năng đầu tiên để hoàn thành. Bạn chỉ cần đợi window.open() để thực hiện và sau đó lệnh thứ hai sẽ được thực thi.

-2

Javascript chạy dưới dạng một chuỗi duy nhất, nếu yêu cầu bạn muốn tạo không có IO, Trong trường hợp đó không thể thực hiện được, nếu có thao tác IO, bạn có thể thực hiện tốt hai chức năng sau khi khác, bản chất của javascript sẽ bắt đầu thực hiện các chức năng tiếp theo khi nó chờ IO. Thông thường trong các ngôn ngữ hỗ trợ luồng cùng một thứ sẽ tự động đạt được trong khoảng thời gian nghỉ CPU cho một chuỗi.

+0

Bao giờ nghe nói về callbacks? –

+0

@Jon Eustace Có, nếu hai cuộc gọi lại được đồng bộ và không đồng bộ trong các trường hợp như vậy, chỉ có một chức năng sẽ được thực hiện tại một thời điểm. – anksanu

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