कई समारोह कॉल करने के लिए क्रोम.रनटाइम । sendMessage() के साथ तुल्यकालिक व्यवहार

0

सवाल

मैं कनेक्ट content.js के साथ background.js 2 करने के लिए विभिन्न कार्यों: इंजेक्षन स्थानीय HTML और से डेटा लाने के लिए एक और वेबपेज. वर्तमान में, createContainer() के बाद शुरू होता है fetchweb() किया है और मैं नहीं हूँ यकीन है कि क्यों (मैं की जरूरत है createContainer() को चलाने के लिए पहली). मैं करने की कोशिश की परिणत करने के लिए दोनों में काम करता है वादा करता हूँ, लेकिन अभी भी एक ही परिणाम

Content.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()

background.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

सबसे अच्छा जवाब

1

अपने दो sendMessages कर रहे हैं दोनों अतुल्यकालिक कार्यों और--जब तक विशेष रूप से निपटने के साथ अतुल्यकालिक कोडिंग के माध्यम से कॉलबैक का वादा किया है, या async/इंतजार-मैं नहीं लगता कि वहाँ किसी भी अन्य तरह की गारंटी करने के लिए जो हल करता है ।

अगर fetchWeb चाहिए हर बार चलाने के बाद createContainer अपने संदेश भेजता है, आप जोड़ सकते fetchWeb करने के लिए sendMessage कॉलबैक (और फिर इसे हटाने से अपने मुख्य शरीर):

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

अगर fetchWeb चाहिए केवल कभी-कभी चलाने के लिए, आप पारित कर सकता है डेटा में createContainer समारोह में उस सवाल का जवाब दे:

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

अगर वहाँ कुछ में हो रहा है "//अधिक कोड" की जरूरत है कि ऐसा करने से पहले fetchWeb चलाता है, तो यह उपयोगी हो जाएगा कि देखने के लिए. लेकिन जब तक कि कोड है अतुल्यकालिक के रूप में अच्छी तरह से, मैं कल्पना है कि कोड है पहले से ही क्रियान्वित । यह सभी के साथ किया जा सकता का वादा किया के रूप में अच्छी तरह से, लेकिन sendMessage पहले से ही सेटअप है करने के लिए अच्छी तरह से काम के साथ कॉलबैक । से दस्तावेज:

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

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में