为什么这个JavaScript函数总是返回'undefined' - 以及如何解决这个问题?

时间:2012-05-28 21:41:18

标签: javascript iphone ios cordova phonegap-plugins

我正在使用带有应用程序首选项插件的phonegap,并尝试创建一个辅助函数来从中获取值。但是该函数未返回正确的值。我知道这与异步的东西有关,但不幸的是我不知道如何修复它。 (我试图在这里搜索帮助,发现很少,并试图用辅助方法实现它)

我想要实现的目标是:

function populateList() {
    var a = 1;

    var number = getSettingFromApplicationPreferences('number');
    // number is always undefined

    var letter = getSettingFromApplicationPreferences('letter');
    // letter is always undefined

    number = (number) ? number : 1;
    letter = (letter) ? letter : 'b';

    // Here I'll do some DOM manipulation and use 'number' and 'letter' on it, and 
    // define new variables based on 'number' and 'letter'

}

这是我需要帮助的辅助函数:

function getSettingFromApplicationPreferences(setting) {

    var x = (function () {
        window.plugins.applicationPreferences.get(
            // setting
            setting, 
            // success callback
            function(returnValue) {
                console.log(setting + ': ' + returnValue);
                return returnValue;
            },
            // error callback
            function(error) {
                alert("Failed to get a setting: " + error);
                return false;
            }
        );
    })();

    return x;   
}

问题
如何使用该辅助函数从应用程序首选项返回'returnValue'?

2 个答案:

答案 0 :(得分:3)

问题是,你的回调实际上并没有为x设置一个值。所以,你将有其他方法去做你正在做的事情,因为返回值不起作用。

答案 1 :(得分:3)

你正在使用异步函数,你不能像你一样分配,因为函数还没有返回,所以你得到一个未定义的。您需要使用回调函数。

这意味着在成功函数内部,您可以使用“returnValue”执行任何操作。