Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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. Попробовал рекурсией, но, как я понимаю, количество вызовов функции превысило максимум (проверял, рекурсия работает). Ваши идеи?
Ответить с цитированием
  #2 (permalink)  
Старый 13.06.2012, 15:07
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

JS - однопоточный язык. Функция wait не ждёт, а хавает ресурсы, причём нагло.

Шанс того, что получится переделать асинхронную операцию в синхронную, в однопоточном приложении, не более чем нулевой.

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

Ясно...
Ответить с цитированием
  #4 (permalink)  
Старый 14.06.2012, 10:05
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

А поподробнее?
Ответить с цитированием
  #5 (permalink)  
Старый 14.06.2012, 10:27
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

ф-ии вида:
var obj = {
text: 'some text'
}
function func1(callback) {
callback.apply(obj)
}
func1(function () { alert(this.text) })


Хотя это что-то не то...

Ну вот допустим ты сделал ф-ию для отправки ajax запросов
ajax('post','page.php', function ( data ) { alert (data) }) // data - это ответ от  сервера


Вот 3ий аргумент и будет являться колбэком
__________________
оляля, ололо

Последний раз редактировалось 9xakep, 14.06.2012 в 10:31.
Ответить с цитированием
  #6 (permalink)  
Старый 14.06.2012, 22:11
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

То есть просто запуск функции после окончания работы другой? Это мне не поможет.
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2012, 13:51
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

Тоже так подумал, но как запихнуть это в 1 функцию?
Ответить с цитированием
  #8 (permalink)  
Старый 21.06.2012, 16:10
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

var folder = /* объект папки */;

alert(CheckingForFile(folder, "file.txt")); // Выведет true или false


Вот как проверку с "сетинтервалами" вставить в функцию CheckingForFile?
Ответить с цитированием
  #9 (permalink)  
Старый 22.06.2012, 13:52
Аватар для function
Говнокодер со стажем
Отправить личное сообщение для function Посмотреть профиль Найти все сообщения от function
 
Регистрация: 06.01.2012
Сообщений: 164

Да всё это бесполезно. Нужно останавливать функцию пока "колбаки", "сетинтервалы" и т. д. не сделают своё дело.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Кросс-браузерные функции B~Vladi Ваши сайты и скрипты 128 01.09.2009 17:11
Проверка существования входного параметра для функции Axe Я не знаю javascript 2 25.05.2009 14:58
Применение функции для каждого элемента sergeygerasimov jQuery 2 26.11.2008 11:15