Use Nightmare.js sem sintaxe ES6 e produza

Eu criei um script de nó simples usando nightmare.js para raspar sites

var Nightmare = require('nightmare');
var vo = require('vo');

vo(run)(function(err, result) {
    if (err) throw err;
});

function *run() {
    var x = Date.now();
    var nightmare = Nightmare();
    var html = yield nightmare
    .goto('http://google.com')
    .evaluate(function() {
        return document.getElementsByTagName('html')[0].innerHTML;
    });

    console.log("done in " + (Date.now()-x) + "ms");
    console.log("result", html);

    yield nightmare.end();
}

Quero executar isso em um ambiente usando uma versão mais antiga do nó, que não suporta os recursos do ES6. Não há exemplos na página do github sobre como fazer isso sem a palavra-chave "yield".

Encontrei um exemplo de uso sem a sintaxe ES6 aqui:Webscraping com pesadelo

Eu escrevi assim:

var night = new Nightmare()
.goto('http://www.google.com')
.evaluate(function () {
  return document.getElementsByTagName('html')[0].innerHTML;
},function (html) {
   console.log("result", html);
  }
)
.run(function (err, nightmare) {
  if (err) return console.log(err);
  console.log('Done!');
});

Ele não falha, mas a função de log de resultados nunca é chamada.

Com a sintaxe de rendimento,obter o valor retornado de "avaliar" é bem direto, mas sem ele, não encontrei nenhuma maneira de fazer isso.

ATUALIZAR Escreveu isso graças à resposta aceita e seus comentários. Ele usa 'Q' e funciona nas versões dos nós anteriores à 0.12:

var Nightmare = require('nightmare');

var Promise = require('q').Promise;

var x = Date.now();
var nightmare = Nightmare();
Promise.resolve(nightmare
  .goto('http://google.com')
  .evaluate(function() {
      return document.getElementsByTagName('html')[0].innerHTML;
})).then(function(html) {
    console.log("done in " + (Date.now()-x) + "ms");
    console.log("result", html);
    return nightmare.end();
}).then(function(result) {

}, function(err) {
   console.error(err); // notice that `throw`ing in here doesn't work
});

questionAnswers(1)

yourAnswerToTheQuestion