¿Cómo hago una cadena de devolución de llamada con q?

Algunos problemas para entender cómo usar "q" (https://github.com/kriskowal/q) una biblioteca de promesas para 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();

esto solo devuelve indefinido ...

Respuestas a la pregunta(2)

Su respuesta a la pregunta