返回具有在函数中设置的值的全局数组

时间:2011-11-04 14:31:46

标签: javascript cordova

我创建了另一篇文章,但我没有准确写出正确的代码以及问题所在。 所以这里是完整的代码。 我在create函数中声明了“myarray”。我将success函数中的值推送到数组并返回create create函数。

问题是我在调用create函数时没有得到任何值。我认为这是我的阵列的范围,但我不确切知道如何解决这个问题。

    function Create(targetdir)
    {
        var myarray = new Array(); 

        //Get a list of file names in the directory
        window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onError);

        function onSuccess(fileSystem) 
        { 
            var entry=fileSystem.root;      
            entry.getDirectory(targetdir, {create: false, exclusive: false}, successdir, fail);     

            //filesystem2 is the target dir
            function successdir(fileSystem2) 
            {           
                var directoryReader = fileSystem2.createReader(); 
                directoryReader.readEntries(success, fail); 

                function success(entries) 
                {

                    var i;
                    for (i=0; i<entries.length; i++) 
                    {
                        myarray.push(entries[i].toURI());
                    }           
                }
            }         
        }

         return myarray;
    }

2 个答案:

答案 0 :(得分:1)

使用回调:

function Create(targetdir, callback)
{
    var myarray = new Array(); 

    //Get a list of file names in the directory
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onError);

    function onSuccess(fileSystem) 
    { 
        var entry=fileSystem.root;      
        entry.getDirectory(targetdir, {create: false, exclusive: false}, successdir, fail);     

        //filesystem2 is the target dir
        function successdir(fileSystem2) 
        {           
            var directoryReader = fileSystem2.createReader(); 
            directoryReader.readEntries(success, fail); 

            function success(entries) 
            {

                var i;
                for (i=0; i<entries.length; i++) 
                {
                    myarray.push(entries[i].toURI());
                }           
            }
        }

        // call callbqack
        callback(myarray);    
    }
}

然后:

Create(whatever, function (myarray) {
  // do something with my array
}); 

答案 1 :(得分:0)

因为你正在调用异步方法,所以你创建方法alwasy将不会返回任何内容,因为window.requestFileSystem仍在执行他的工作。您可以执行以下操作

function Create(targetdir)
{
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onSuccess, onError);

    function onSuccess(fileSystem) 
    { 
        var myarray = new Array(); 
    // fill myarray
    // use myarray or skip the fill array and use it directly
    }
}

或使用@IAbstractDownvoteFactor

指定的回调方法