Существует ли обратный вызов для «chrome.storage.local.set»

#javascript #google-chrome-extension

#javascript #google-chrome-extension

Вопрос:

Мне нужно отправить обратно сообщение Chrome только после установки chrome.storage.local, но я не могу найти способ «импортировать» sendResponse функцию внутри него.

Пожалуйста, учтите, что весь этот код выполняется в фоновом скрипте и запускается сообщением, отправленным из content_script и / или из всплывающего окна действия браузера. Вот почему мне нужно отправить ответ обратно.

У вас есть какие-либо идеи? 🤣

 
// Global array
let documents = [];

// Recursive ajax call
function get_and_merge_data(cursor = null, token, sendResponse) {
    //console.log("Data collection started");
    let url = (cursor) ? `https://[omissis]?[omissis]cursor=?{cursor}` : `[omissis]?paging_mode=standard_cursor`;
    //console.log("Cursor: "   cursor);

    $.ajax({
        headers: {
            "X-AUTH-TOKEN": token
        },
        type: "get",
        dataType: "json",
        crossDomain: true,
        url: url,
        // dataType: "json",
        success: function (response, textStatus, xhr) {
            // Silence is golden...
        }
    }).done(function (response) {

        chrome.storage.local.set({ "documents_cache": response }, function (sendResponse) {
            console.log(`documents_cache has been saved`);
            documents = new Array(); // Empty the array

            sendResponse("documents have been loaded and saved!"); // <-- this does not work
        });
        //return
    });
}
  

Ответ №1:

Подпись обратного вызова для chrome.storage.local.set является:

 function() {...};
  

И все же вы передаете его:

         function (sendResponse) {
            console.log(`documents_cache has been saved`);
            documents = new Array(); // Empty the array

            sendResponse("documents have been loaded and saved!"); // <-- this does not work
        }
  

sendResponse Переменная, определенная в приведенном выше обратном вызове, будет undefined , и она перезапишет оригинал sendResponse , который был первоначально объявлен здесь:

 // Recursive ajax call
function get_and_merge_data(cursor = null, token, sendResponse) {
  

Все это, чтобы сказать, просто измените свой обратный вызов на .set , чтобы не принимать аргументов:

         function () {
            console.log(`documents_cache has been saved`);
            documents = new Array(); // Empty the array

            sendResponse("documents have been loaded and saved!"); // <-- this does not work
        }