cuốn sách gpt4 ai đã làm

javascript - lời hứa tiến bộ

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 22:32:24 27 4
mua khóa gpt4 Nike

lý thuyết:Lúc đầu tôi đã hứa khoảng 100 lần và sau đó đã sử dụng Promise.all() Giải quyết chúng.

Mỗi lời hứa trong số 100 lời hứa này lần lượt thực hiện một số lệnh gọi REST không đồng bộ và phản hồi của chúng có thể khác nhau đáng kể (ví dụ: do kết nối mạng).

Quá trình giải quyết tất cả 100 lời hứa mất khoảng 20 giây. Trong khoảng thời gian này, người dùng phải được cung cấp phản hồi theo thời gian thực về tiến trình để thu hút họ.

Để triển khai tiến trình trên các hoạt động không đồng bộ này, tôi đang nghĩ đến việc sử dụng ProgressCounter ở phía máy khách, giá trị của nó sẽ được cập nhật ngay sau khi mỗi lời hứa được giải quyết.

Vấn đề là, nếu ProgressCounter = 1 và vì tất cả các hoạt động này không đồng bộ, tôi lo lắng về việc gặp phải tình trạng chạy đua, chẳng hạn, giá trị hiện tại của ProgressCounter được truy xuất bởi hai lời hứa khác nhau có thể giống nhau, đó là 1, vì vậy họ có thể thử tăng ProgressCounter lên cùng giá trị là 2. Vì vậy, giá trị cuối cùng sẽ không phải là 3 do điều kiện chủng tộc.

cuộc thí nghiệm:Tôi đã cố gắng tái tạo lý thuyết này nhưng không thể sử dụng như sau:

var tiến trình = {};
tiến trình.counter = 1;

var lời hứa1 = Lời hứa mới (hàm (giải quyết, từ chối) {
giải quyết();
});

var lời hứa2 = Lời hứa mới (hàm (giải quyết, từ chối) {
giải quyết();
});

Promise1.then(function() {
tiến trình.counter += 1;
});

Promise2.then(function() {
tiến trình.counter += 1;
});

setTimeout(function() {
cảnh báo (tiến trình.counter); // tiến trình.counter: 3
}, 1000);`

câu hỏi:Câu hỏi đặt ra là liệu điều kiện chạy đua như được mô tả về mặt lý thuyết ở trên có thể đạt được không? Nếu không, những sai sót trong lý thuyết là gì? Nếu vậy, cách tốt nhất để theo dõi tiến trình giải quyết lời hứa là gì?

câu trả lời hay nhất

Câu hỏi: Câu hỏi đặt ra là liệu điều kiện chạy đua như vậy có thể xảy ra như mô tả trong lý thuyết ở trên không? Nếu không, lý thuyết này có sai sót như thế nào?

Câu trả lời làKHÔNG, tình trạng dồn đuổi như vậy không thể xảy ra trong Javascript, vì Javascript là đơn luồng. (Xem: MDN Mô hình đồng thời và vòng lặp sự kiện)

Điều này có nghĩa là khi trình xử lý gọi lại đang xử lý dữ liệu(giả sử việc cài đặt bộ đếm là một hoạt động đồng bộ, += là), không có gì có thể buộc nó "cho phép" thực thi, trình xử lý tiếp theo chỉ có thể chạy sau khi trình xử lý trước đó đã hoàn thành.

Về tiến trình javascript - lời hứa, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32260367/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress