หลายฟังก์ชันโทรไปบโครเมี่ยมruntime.sendMessage()กับ synchronous พฤติกรรม

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 เป็นทั้งสอง asynchronous ฟังก์ชันที่แล้ว--นอกจากเป็นพิเศษจัดการกับ asynchronous ถูกเข้ารหัสฉุกเฉินผ่านคอลแบกสัญญาหรือ async/รอ--ฉันไม่คิดว่ามันมีทางอื่นอีกไหมที่จะรับประกันซึ่ง resolves ก่อน

ถ้า 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 วิ่งหนีมันคงต้องการความช่วยเหลือเหอเห็นของพวกนั้นหรอก แต่นอกจากโค้ดนั่นคือ asynchronous ย่างที่ฉันจินตนาการว่ารหัสอยู่แล้วระหว่างประมวลผลก่อน นี่อาจจะเป็นพอแล้วกับคำสัญญาเหมือนกันแต่คน 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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่