не асинхронная функция, выполняемая как jQuery Deferred

Допустим, я хочу обрабатывать некоторые задачи синхронно, поэтому у меня есть эта функция:

function executePromiseQueueSync(queue){
    var seed = $.Deferred(),
        finalPromise;

    finalPromise = _.reduce(queue, function(memo, promise){
        return memo.then(function(){
            return promise.funct.apply(null, promise.argmnt);
        });
    }, seed.promise());

    seed.resolve();
    return finalPromise;
}

Теперь я могу использовать его для обработки некоторых файлов:

_.each(fileList, function(element, index, list){
    _.each(element, function(el, idx, lst){
        promisesQueue.push({funct: processFile, argmnt:[el, index + (len - fileList.length) ,len]});
    });
});

Выполните его и укажите прогресс:

executePromiseQueueSync(promisesQueue).then(function(){
   ....
}, function(){
    ....
}).progress(function(msg, progress, name, index, status, desc){
        console.log('progress');
});

Сама функция процесса выглядит так:

function processFile(file, index, size)
{
    var dfd = new jQuery.Deferred();
    if (file.name.match('(.*)\\.jpg'))
        ...
    else if
        ...
    else
       $.when(processWrongFileType(file)).then(function(){
         dfd.notify(...);
         dfd.resolve();
      });

    return dfd.promise();
}

как видите, делать нечего, когда файл имеет неправильный тип:

Поэтому иногда я хотел бы выполнить синхронный код, как обещание:

function processWrongFileType(){
    var dfd = new jQuery.Deferred();
    dfd.resolve();
    console.log("blah");
    return dfd.promise();
}

Проблема заключается в том, что если будет выполнен processWrongFileType, уведомление не будет работать. Если я изменю processWrongFileType, чтобы он выглядел так:

function processWrongFileType()
{
    var dfd = new jQuery.Deferred();
    setTimeout(function(){dfd.resolve();},1);
    return dfd.promise();
}

notify () будет работать. Есть ли способ избежать setTimeout и по-прежнему иметь функцию notify (), работающую с событием progress?

Ответы на вопрос(1)

Ваш ответ на вопрос