Tình huống là tôi đang tải động một tập hợp các tập lệnh từ API mà sau đó tôi gọi qua eval()
. Tôi không quan tâm thứ tự các tập lệnh được gọi, nhưng tôi không muốn bất kỳ lệnh nào được gọi cùng một lúc. Tức là, các kịch bản A, B và C có thể được trả về theo thứ tự C, B, A và tôi muốn bắt đầu eval(C)
ngay lập tức khi C được trả lại, nhưng tôi muốn eval(B)
đợi đến khi hoàn thành eval(C)
.Thực thi tập lệnh được trả về từ .each() một cách đồng bộ, nhưng không chậm trễ theo thứ tự hoàn thành
Không nhận được mã đầy đủ lông, đây là trái tim của nó trong đó "trường hợp" là một mảng chuỗi.
$.each(instances, function(index, instance) {
var apiUrl = "http://the-api-url.com/" + instance;
$.getJSON(apiUrl, function(data) {
// except I don't want to eval here as evaluations may overlap
eval(data.script);
});
});
Từ những gì tôi hiểu, tôi có thể sử dụng .when()
đợi cho đến khi tất cả đã hoàn tất, nhưng điều đó sẽ lãng phí thời gian như tôi không cần phải đợi cho đến khi tất cả được tải xuống để bắt đầu thực hiện của họ.
Đọc về Lời hứa trong ES5. – Niloct
Nếu bạn đang nói rằng chúng có thể được tải xuống và được thực thi theo bất kỳ thứ tự nào, nhưng các lệnh gọi đến 'eval() 'không thể' chồng lên nhau 'thì bạn đã viết mã đó. –
Bạn có đang đánh giá bất kỳ hoạt động không đồng bộ nào không? Nếu không, tôi không thấy bất kỳ vấn đề nào trong logic của bạn –