If Deferred has Q equivalent of `makeNodeResolver()` or bluebird `.asCallback` then you should use it probably like:

```js
var def = deferred();
jsdom({
     html: String(html),
     done: def.makeNodeResolver()
});

return def.promise.then(function(window){
    var data = {};
    // The title is the content of the 1st "h1" element
    var elems = window.document.getElementsByTagName('h1');
    if (elems.length) data.title = elems[0].textContent;

    // The description is the content of the 1st "p" element
    elems = window.document.getElementsByTagName('p');
    if (elems.length) data.description = elems[0].textContent;

    // Freeing memory associated with the window
    window.close();
    return data;  
});
```