+1
setinterval không hoạt động khi tab bị freeze
Em đang làm chức năng thanh toán bên thứ 3 không dùng thư viện. Hiện tại em đang sử lý window.open() để mở trang mới và setInterval để kiểm tra liên tục xem khi nào thì trang thanh toán redirect về. Em đang gặp vẫn đề là khi thao tác bên thứ 3 lâu thì trang chính sẽ bị freeze nên hàm setInterval sẽ không hoạt động cho đến khi active lại tab chính. Bác nào gặp case này chưa cho em xin giải pháp
Thêm một bình luận
2 CÂU TRẢ LỜI
0
// example code from chatGPT
function openPaymentWindow() {
return new Promise((resolve, reject) => {
const paymentWindow = window.open("https://example.com/payment");
// Lắng nghe sự kiện khi trang thanh toán redirect về
window.addEventListener("message", (event) => {
if (event.origin === "https://example.com" && event.data === "payment_success") {
resolve();
}
});
// Xử lý trường hợp trang thanh toán không redirect về sau một khoảng thời gian nhất định
setTimeout(() => {
reject(new Error("Timeout: Payment window did not redirect back."));
}, 60000); // Thời gian chờ tối đa là 60 giây
});
}
async function performPayment() {
try {
await openPaymentWindow();
console.log("Payment successful!");
// Tiếp tục xử lý sau khi thanh toán thành công
} catch (error) {
console.error("Payment error:", error);
// Xử lý lỗi khi thanh toán thất bại hoặc timeout
}
}
performPayment();
@Tinhoc_123 Cảm ơn bác đã trả lời nhưng bên trang thanh toán chỉ redirect về chứ không postEvent nên window.addEventListener("message") không chạy
0
- Khi người dùng thanh toán -> đính kèm id hay data gì đó để nhận biết giao dịch.
- Người dùng thanh toán thành công -> bên thứ 3 khả năng có cơ chế đính kèm id hay data của mình về 1 link do mình đăng ký
- Ở link mình đăng ký -> Đọc id ra và cập nhật trạng thái thanh toán.