Tôi có thể giải quyết một cách không đồng bộ một loạt các lời hứa với Promise.all(array)
. Tuy nhiên .then()
sẽ chỉ chạy sau khi tất cả các lời hứa đó đã được giải quyết. Làm thế nào tôi có thể thực hiện các hành động như lời hứa được giải quyết?Thực hiện các hành động như lời hứa được hoàn thành bằng cách sử dụng Promise.all()
Ví dụ: tôi muốn tải tất cả các đoạn văn từ một bài viết không đồng bộ bằng cách sử dụng Promise.all()
- Bằng cách này, mạng yêu cầu tất cả các đám cháy cùng một lúc. Nếu đoạn 1 được thực hiện tải, tôi muốn nó để render cho trang - nhưng chỉ khi nó được thực hiện tải trước đoạn 2, sau đó tôi muốn đoạn 2 để tải. Nếu đoạn 3 được thực hiện tải và 2 không phải là, tôi muốn 3 để chờ 2 trước khi kết xuất trang. Và cứ thế.
tôi đã cố gắng một cái gì đó như thế này nhưng tôi không biết phải làm gì tiếp theo:
var getStuff = function(number, time){
return new Promise(function(resolve, reject){
window.setTimeout(function(){resolve(`${number} - Done.`)}, time);
});
};
Promise.all([ getStuff(1, 200),
getStuff(2, 100),
getStuff(3, 250),
getStuff(4, 200),
getStuff(5, 300),
getStuff(6, 250),
getStuff(7, 5000)])
.then(function(data){
console.log(data);
});
Làm thế nào tôi có thể nhận được các bản ghi giao diện điều khiển các dữ liệu xảy ra cái khác - mà không giải quyết từng hứa với một then()
trước khi đưa ra yêu cầu tiếp theo? Có cách nào tốt hơn để làm điều này?
Một số thư viện hứa hẹn có * tiến trình * callbacks. – alex
Không có cách nào để có được hành vi đó bằng cách sử dụng es6 bản địa? Không thêm thư viện khác vào dự án của tôi? – hackrnaut
Tại sao không chỉ 'getStuff (...)' và 'sau đó' render, cho mỗi lời hứa? –