首页 > 解决方案 > 如何使异步函数返回布尔值而不是承诺

问题描述

我正在尝试popup.html在我的 chrome 扩展中提取文件中复选框的布尔值。我有这个:

var highlightedCheckBoxVal = $("#highlightedCheckbox").prop("checked");

function getAsync(valueToGet) {
    return new Promise((resolve) => {
        chrome.storage.sync.get(valueToGet, (value) => {
            resolve(value);
            console.log("resolved");
        })
    })
}


//returns object - I want it to return true or false
$(document).keyup(async function (e) {
    if (e.keyCode == 120) {
        getAsync("highlightedCheckBoxVal").then(val => {
            console.log(val);
        });
    }
});

控制台返回一个对象,我希望它返回一个布尔值。我认为这是因为getAsync正在返回一个承诺,但我怎样才能使这个承诺成为一个布尔值?

我也尝试过记录val.valueOf()

标签: google-chrome-extension

解决方案


正如我们在文档中看到的,回调接收一个包含所有请求的键的对象(您可以请求一个字符串数组),因此解决方案是将键提取为result[key].

function getAsync(key) {
  return new Promise((resolve) => {
    chrome.storage.sync.get(key, (data) => resolve(data[key]));
  });
}

推荐阅读