Yêu cầu thg 6 23, 2023 2:01 CH 126 0 2
  • 126 0 2
+1

setinterval không hoạt động khi tab bị freeze

Chia sẻ
  • 126 0 2

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

2 CÂU TRẢ LỜI


Đã trả lời thg 6 24, 2023 3:17 SA
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();

Chia sẻ
thg 6 24, 2023 8:54 SA

@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

Đã trả lời thg 6 27, 2023 10:25 SA
0
  1. Khi người dùng thanh toán -> đính kèm id hay data gì đó để nhận biết giao dịch.
  2. 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ý
  3. Ở link mình đăng ký -> Đọc id ra và cập nhật trạng thái thanh toán.
Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí