【问题标题】:How to use function argument as part of variable?如何使用函数参数作为变量的一部分?
【发布时间】:2015-10-18 05:42:05
【问题描述】:

这行得通

chrome.storage.local.get('sizePref', function(items) { // Get size preferences from storage
  var sizePref2 = items.sizePref.tops; // Set size to a var
  console.log("You can get this " + sizePref2)
});

但是,当我尝试使它成为一个函数时

function getSize(itemSize) {
  chrome.storage.local.get('sizePref', function(items) { // Get size preferences from storage
    var sizePref = items.sizePref.itemSize;
    return (sizePref);
  });
}
var mySize = getSize(tops);
console.log("This size that u are looking for is " + mySize)

它说“tops”是未定义的。

【问题讨论】:

  • @jfriend00 在他的回答中指出了一个严重的问题——但我认为另一个问题是函数 getSize 没有返回任何内容——只有异步函数 chrome.stroage.local.get 可以。

标签: javascript function variables google-chrome-extension


【解决方案1】:

当属性名称在变量中时,您使用括号语法。所以,而不是这个:

items.sizePref.itemSize

你用这个:

items.sizePref[itemSize]

此外,您不能从异步回调同步返回值。这种逻辑是错误的。因此,您不能创建将返回结果的函数getSize()。在getSize() 已经返回之后的一段时间后,结果才会可用。您必须将回调传递给 getSize() 或让 getSize() 返回一个承诺。

function getSize(itemSize) {
  return new Promise(function(resolve) {
      chrome.storage.local.get('sizePref', function(items) { // Get size preferences from storage
        resolve(items.sizePref[itemSize]);
  });
}

getSize("whatever").then(function(result) {
    // code that uses the result here
});

【讨论】:

    【解决方案2】:

    如果您不熟悉 Promise(即不太可能),那么您也可以使用回调。我个人认为承诺是解决问题的更好方法。

    function getSize(itemSize, callback) {
      chrome.storage.local.get('sizePref', function(items) { 
        // Get size preferences from storage
        var sizePref = items.sizePref[itemSize]; //thanks @jfriend00
        callback (sizePref); //thanks at @Kevin Friedheim
      });
    }
    var mySize = getSize(tops, function (mySize) {
        console.log("This size that u are looking for is " + mySize)
    });
    

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多