Как последовательно запустить обещания с Q в Javascript?

Я с трудом выполняю обещания последовательно.

var getDelayedString = function(string) {
    var deferred = Q.defer();

    setTimeout(function() {
        document.write(string+" ");
        deferred.resolve();
    }, 500);

    return deferred.promise;
};

var onceUponATime = function() {
    var strings = ["Once", "upon", "a", "time"];

    var promiseFuncs = [];

    strings.forEach(function(str) {
        promiseFuncs.push(getDelayedString(str));
    });

    //return promiseFuncs.reduce(Q.when, Q());
    return promiseFuncs.reduce(function (soFar, f) {
        return soFar.then(f);
    }, Q());    
};

getDelayedString("Hello")
.then(function() {
    return getDelayedString("world!")
})
.then(function() {
    return onceUponATime();
})
.then(function() {
    return getDelayedString("there was a guy and then he fell.")
})
.then(function() {
    return getDelayedString("The End!")
})

OnceUponATime () должен последовательно вывести ["Однажды", "на", "время"] но вместо этого они выводятся сразу по какой-то причине.

jsFiddle здесь:http://jsfiddle.net/6Du42/2/

Есть идеи, что я делаю не так?

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

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