Edit in JSFiddle

var someAsyncThing = function(value, callback) {
    setTimeout(function() {
         callback(value + 100);   
    }, 100); 
};

var items = [1,2],
    promises = [],
    result = ko.observableArray();

ko.applyBindings({items: result});

result.push('Starting');

items.forEach(function(item) {
    var defer = Q.defer();
    someAsyncThing(item, function(value) {
        result.push('Async Complete: ' + value);
        defer.resolve(value);
    });
    var promise = defer.promise.then(function(value) {
        result.push('Promise: ' + value);
        return value;
    });
    promises.push(promise);
});

result.push('Chain Built');

Q.all(promises).then(function(value) {
    result.push('Chain Complete');
    result.push('Value: '  + value);
});
<ol data-bind="foreach: items">
    <li data-bind="text: $data"></li>
</ol>