2015-10-18 103 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) 
}); 
相關問題