Jak zrobić łańcuch zwrotny za pomocą q?

Mam pewne problemy ze zrozumieniem, jak używać „q” (https://github.com/kriskowal/q) biblioteki obietnic dla javascript:

var delayOne = function() {
    setTimeout(function() {
        return 'hi';
    }, 100);
};

var delayTwo = function(preValue) {
    setTimeout(function() {
        return preValue + ' my name';
    }, 200);
};

var delayThree = function(preValue) {
    setTimeout(function() {
        return preValue + ' is bodo';
    }, 300);
};

var delayFour = function(preValue) {
    setTimeout(function() {
        console.log(preValue);
    }, 400);

};

Q.fcall(delayOne).then(delayTwo).then(delayThree).then(delayFour).end();

to zwraca tylko undefined ...

questionAnswers(2)

yourAnswerToTheQuestion