Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个JavaScript函数总是返回';未定义'–;如何解决这个问题?_Javascript_Iphone_Ios_Cordova_Phonegap Plugins - Fatal编程技术网

为什么这个JavaScript函数总是返回';未定义'–;如何解决这个问题?

为什么这个JavaScript函数总是返回';未定义'–;如何解决这个问题?,javascript,iphone,ios,cordova,phonegap-plugins,Javascript,Iphone,Ios,Cordova,Phonegap Plugins,我正在使用带有应用程序首选项插件的phonegap,并尝试创建一个帮助函数来从中获取值。但是,函数没有返回正确的值。我知道这与异步有关,但不幸的是,我不知道如何修复它。(我尝试在这里搜索帮助,但几乎找不到,并尝试在helper方法中实现它) 我想要实现的是: function populateList() { var a = 1; var number = getSettingFromApplicationPreferences('number'); // number

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

我想要实现的是:

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”?

问题是,回调函数实际上没有为x设置值。因此,无论您在做什么,您都将使用其他方法,因为返回值不起作用。

问题是,您的回调实际上没有为x设置值。因此,无论您在做什么,您都将有其他方法来完成,因为返回值将不起作用。

如果您错误地使用了异步函数,您不能像现在这样赋值,因为函数尚未返回,因此您会得到一个未定义的值。您需要改用回调函数


这意味着在success函数中,您可以对“returnValue”执行任何需要执行的操作。

如果您错误地使用了异步函数,则无法像现在这样进行赋值,因为函数尚未返回,因此会得到一个未定义的值。您需要改用回调函数



这意味着在success函数中,您可以对“returnValue”执行任何需要执行的操作。

多么长的
函数
名称!不要这样做,因为您可能会在一个字母中键入错误,这会让您头疼……运行时环境会异步调用success和error回调,这将忽略返回值(在大多数情况下)。整个立即执行函数是因为您试图假装它不是异步的还是什么?否则会有点混乱。是的,因为我认为这会使它成为非异步的。。。不是js的大师:(为什么?因为
b
有未定义的值,请修复?不要给
b
未定义的值多么长的
函数
名称!不要这样做,因为您可能键入一个字母错误,这会让您头疼……成功和错误回调由运行时环境异步调用,它将忽略retur。)n值(大多数情况下)。整个立即执行函数是因为您试图假装它不是异步的还是什么的?否则这有点令人困惑。是的,因为我认为它会使它成为非异步的…而不是js中的专家:(为什么?因为
b
有未定义的值,所以修复?不要给
b
未定义的值。所以将
populateList
函数放在
函数(returnValue)的内部。)
函数。这不是一个选项,因为我需要多个设置值作为变量,所以会有太多的设置值nesting@micadelli-你必须这样做。这意味着将
populateList
放入成功回调中不是一个选项。定义PopulateListWithParam函数,在回调中使用returnValue调用它,如:PopulateListWithParam(returnValue)是的。因此将
populateList
函数放入
函数(returnValue)中
函数。这不是一个选项,因为我需要多个设置值作为变量,所以会有太多的设置值nesting@micadelli-你必须这样做。这意味着将
populateList
放入成功回调中不是一个选项。定义PopulateListWithParam函数,在回调中使用returnValue调用它,如:PopulateListWithParam(returnValue)您对Dhaivat Pandya答案的评论对我来说有一定意义…但我已经更新了代码示例以澄清问题您对Dhaivat Pandya答案的评论对我来说有一定意义…但我已经更新了代码示例以澄清问题