Вернуть глобальный массив со значениями, установленными в функции - PullRequest
1 голос
/ 04 ноября 2011

Я создаю еще один пост, но я не написал точно правильный код и в чем проблема.Так что вот полный код.Я объявляю «myarray» в функции создания.Я помещаю значения в моей функции успеха в массив и возвращаюсь в функцию создания.

Проблема в том, что я не получаю никаких значений при вызове функции 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 ]

1 голос
/ 04 ноября 2011

Использовать обратный вызов:

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
}); 
0 голосов
/ 04 ноября 2011

потому что вы вызываете асинхронный метод, вы создаете метод 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...