Chrome'a çoklu işlev çağrısı.çalışma.Eşzamanlı davranışa sahip sendMessage()

0

Soru

İçeriği bağlarım.arka plan ile js.js 2 farklı görev yapmak için: yerel HTML'yi enjekte edin ve başka bir web sayfasından veri alın. Şu anda, createContainer() sonra başlar fetchweb() bitti ve neden olduğundan emin değilim (ihtiyacım var createContainer() önce koşmak için). Her iki işlevi de Söze dönüştürmeye çalıştım ama yine de aynı sonuç

İçerik.js

function createContainer1() {
    // call html file container
    chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
        $("#container1").html(html);
    });
    // more code
}
    
function fetchWeb() {
    chrome.runtime.sendMessage(
        { cmd: "send_url", url: window.location.href},
        function (response) {
            console.log(JSON.stringify(response));
        }
    );
}

createContainer1()
fetchWeb()

arka plân.js

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
    if (request.cmd == "read_cont1") {
        $.ajax({
            url: chrome.extension.getURL("container1.html"),
            dataType: "html",
            success: sendResponse,
        });
        return true;
    } else if (request.cmd == "send_url") {
        sendResponse({ review_url: fetchData(request.url) });
        return true;    
    }
});
google-chrome-extension javascript
2021-11-18 10:43:15
1

En iyi cevabı

1

İki sendMessages özellikle kodlama ile zaman uyumsuz geri aramaları ile ilgili sürece hem zaman uyumsuz fonksiyonlar var, sözler, ya da zaman uyumsuz/ilk gideren garanti altına almak için başka bir yol olduğunu sanmıyorum...bekliyor.

createContainer mesajını her gönderdikten sonra fetchWeb çalışması gerekiyorsa, sendmessage'ın geri aramasına fetchWeb ekleyebilir (ve ana gövdenizden kaldırabilirsiniz):

...chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
    $("#container1").html(html);
    fetchWeb();
});...

Fetchweb'in yalnızca bazen çalışması gerekiyorsa, bu soruyu yanıtlayan createContainer işlevine veri iletebilirsiniz:

function createContainer1(executeFetchWeb) {
    // call html file container
    chrome.runtime.sendMessage({ cmd: "read_cont1" }, function (html) {
        $("#container1").html(html);
        if (executeFetchWeb) {fetchWeb()}
    });
    // more code
}

fetchWeb çalıştırılmadan önce gerçekleşmesi gereken "//more code" da başka bir şey varsa, bunu görmek yararlı olacaktır. Ancak bu kod da eşzamansız olmadığı sürece, kodun zaten önce yürütüldüğünü hayal ediyorum. Bunların hepsi vaatlerle de yapılabilir, ancak sendMessage zaten geri aramalarla iyi çalışacak şekilde ayarlanmıştır. Belgelerden:

chrome.runtime.sendMessage(
  extensionId?: string,
  message: any,
  options?: object,
  responseCallback?: function,
)
2021-11-21 02:51:53

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................