खोज…


टिप्पणियों

आधिकारिक दस्तावेज

एसिंक्रोनस रूप से प्रतिक्रिया भेजें

chrome.runtime.onMessage रूप से chrome.runtime.onMessage कॉलबैक से प्रतिक्रिया भेजने के प्रयास में हम इस गलत कोड को आज़मा सकते हैं :

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    $.ajax({
        url: 'https://www.google.com',
        method: 'GET',
        success: function(data) {
            // data won't be sent
            sendResponse(data);
        },
    });
});

हालाँकि, हम पाएंगे कि data कभी नहीं भेजा जाता है। ऐसा इसलिए होता है क्योंकि हमने एक अतुल्यकालिक अजाक्स कॉल के अंदर sendResponse डाल दिया है, जब success विधि निष्पादित की जाती है, तो संदेश चैनल बंद कर दिया गया है।

समाधान सरल होगा, जब तक हम स्पष्ट रूप से return true; कॉलबैक के अंत में, जो इंगित करता है कि हम एसिंक्रोनस रूप से एक प्रतिक्रिया भेजना चाहते हैं, इसलिए संदेश चैनल को दूसरे छोर (कॉलर) के लिए खुला रखा जाएगा जब तक कि sendResponse निष्पादित न हो जाए।

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    $.ajax({
        url: 'https://www.google.com',
        method: 'GET',
        success: function(data) {
            // data would be sent successfully
            sendResponse(data);
        },
    });

    return true; // keeps the message channel open until `sendResponse` is executed
});

बेशक, यह ऑनमैसेज कॉलबैक से एक स्पष्ट return पर भी लागू होता है:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.action == 'get') {
        $.ajax({
            url: 'https://www.google.com',
            method: 'GET',
            success: function(data) {
                // data would be sent successfully
                sendResponse(data);
            },
        });

        return true; // keeps the message channel open until `sendResponse` is executed
    }

    // do something synchronous, use sendResponse

    // normal exit closes the message channel
});


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow