从Javascript中的异步函数获取返回值

时间:2016-08-06 20:45:38

标签: javascript asynchronous google-chrome-extension

我有一个函数,它通过chrome.storage.sync.get检查存储的值,并在存在所述存储值时插入一个CSS文件。

我意识到chrome.storage.sync.get是一个异步函数,并且返回值没有按预期传回makeAggressive()函数。但是,我不知道如何编写此代码以将if (result == 'aggressive')的结果传递给makeAggressive()

如何检索存储的值,检查其值并将结果返回给调用函数?

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) {
    if (info.status == 'complete') applyCSS(tab);
});

function applyCSS(tab) {
    var tabUrl = tab.url;

    if (makeAggressive()) {
        chrome.tabs.insertCSS(tab.id, {
            file: "aggressive.css"
        });
    }
}

function makeAggressive() {
    chrome.storage.sync.get(function(items) {
        var result = items.intensityLevel;
        if (result == 'aggressive') {
            return true;
        }
  });
}

1 个答案:

答案 0 :(得分:2)

只需将回调传递给异步函数即可 异步活动完成后,应调用回调。

async_function(function() {
    // do something after async_function completes and invokes this callback
});

function async_function(callback) {
    something_async(function(result) {
        callback(result);
    });
}

在你的情况下:

function applyCSS(tab) {
    var tabUrl = tab.url;

    makeAggressive(function() {
        chrome.tabs.insertCSS(tab.id, {
            file: "aggressive.css"
        });
    });
}

function makeAggressive(callback) {
    chrome.storage.sync.get(function(items) {
        var result = items.intensityLevel;
        if (result == 'aggressive') {
            callback();
        }
    });
}