Rumah > hujung hadapan web > tutorial js > Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?

Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?

DDD
Lepaskan: 2024-10-30 01:50:03
asal
894 orang telah melayarinya

Why Does My `chrome.tabs.query` Result Appear Unavailable After Calling?

Sifat Asynchronous chrome.tabs.query: Mengapa Keputusan Kelihatan Tidak Tersedia Selepas Memanggil

Dalam membangunkan sambungan untuk Google Chrome, mendapatkan maklumat tab menggunakan chrome.tabs.query selalunya melibatkan penciptaan tatasusunan (formTabs) untuk menyimpan data tab dan kemudian mengakses kandungannya. Walau bagaimanapun, tingkah laku yang tidak dijangka boleh timbul apabila kod ini tidak dilaraskan dengan betul untuk sifat tak segerak chrome.tabs.query.

Pertimbangkan contoh berikut:

<code class="javascript">var fourmTabs = new Array();
chrome.tabs.query({}, function (tabs) {
  for (var i = 0; i < tabs.length; i++) {
    fourmTabs[i] = tabs[i];
  }
});
for (var i = 0; i < fourmTabs.length; i++) {
  if (fourmTabs[i] != null)
    window.console.log(fourmTabs[i].url);
  else {
    window.console.log("??" + i);
  }
}</code>
Salin selepas log masuk

Dalam contoh ini, kod cuba mencetak URL setiap tab dalam tatasusunan selepas panggilan balik chrome.tabs.query dilaksanakan. Walau bagaimanapun, apabila dijalankan tanpa titik putus, konsol kekal kosong, manakala menggunakan titik putus menghasilkan hasil yang dijangkakan.

Isu ini timbul kerana chrome.tabs.query ialah fungsi tak segerak, bermakna panggilan baliknya dilaksanakan secara berasingan daripada kod berikutnya . Apabila titik putus digunakan, pelaksanaan kod berhenti seketika pada titik putus pertama, membenarkan panggilan balik selesai sebelum gelung kedua dilaksanakan. Tanpa titik putus, gelung kedua dilaksanakan serta-merta selepas yang pertama, sebelum panggil balik chrome.tabs.query mempunyai masa untuk mengumpulkan data tab. Akibatnya, tatasusunan fourmTabs kosong apabila diakses dalam gelung kedua.

Untuk menyelesaikan isu ini dan memastikan kod beroperasi dengan betul, gelung kedua perlu dipindahkan ke dalam fungsi panggil balik chrome.tabs.query. Dengan cara ini, pelaksanaan gelung kedua dijamin berlaku hanya selepas data tab telah diambil:

<code class="javascript">chrome.tabs.query({}, function (tabs) {
  var fourmTabs = new Array();
  for (var i = 0; i < tabs.length; i++) {
    fourmTabs[i] = tabs[i];
  }
  for (var i = 0; i < fourmTabs.length; i++) {
    if (fourmTabs[i] != null)
      window.console.log(fourmTabs[i].url);
    else {
      window.console.log("??" + i);
    }
  }
});</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Keputusan `chrome.tabs.query` Saya Kelihatan Tidak Tersedia Selepas Memanggil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan