Показать сообщение отдельно
  #1 (permalink)  
Старый 13.06.2012, 13:53
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

Асинхронное программирование - реализация функции для "синхронизации"
В Windows 8 мне понадобилась функция для проверки существования файла. Таковой разработчиками не введено, пришлось написать самому.
var ret;
var aux_var;

function wait(variable) {

    if (variable) {

        return true;

    } else {

        return wait(variable);

    }

}

//-------------------------------------------------------------

function CheckingForFile(folder, file) {

    ret = false;
    aux_var = 0;

    folder.getItemsAsync().then(function (items) {

        items.forEach(function (item) {

            if (item.name == file) {

                ret = true;

            }

        });

        aux_var = 1;

    });

    wait(aux_var);

    return ret;

}

В фунцию CheckingForFile(folder, file) передаётся специальный объект папки и название файла. По идее она дожна возвращать true, если в папке есть файл, а иначе false. Функция getItemsAsync() получает все элементы, находящиеся в папке, в качестве массива. then(func) назначает фунцию, которая запускается при окончании получения массива файлов. Мне нужно задерживать окончание функции до того, как закончится выполнение функции func. Попробовал рекурсией, но, как я понимаю, количество вызовов функции превысило максимум (проверял, рекурсия работает). Ваши идеи?
Ответить с цитированием