2015-10-18 144 views
1

这工作如何使用函数参数作为变量的一部分?

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) 

它说: “顶” 是不确定的。

+1

@ jfriend00指出,在他的回答一个严重的问题 - 但我认为还有一个问题是功能'getSize'不返回任何东西 - 只有异步函数'chrome.stroage.local.get'一样。 –

回答

6

当属性名称在变量中时,使用括号语法。所以,与其这样:

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 
}); 
0

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

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) 
}); 
相关问题