2016-10-24 4 views
0

Я использую браузер-perf, чтобы получить результаты работы браузера.Как получить данные, возвращаемые с обещания?

У меня есть следующий код:

var browserPerf = require('browser-perf'); 
var _ = require('lodash'); 
var fs = require('fs'); 
var colors = require('colors'); 
var couchbase = require('couchbase'); 
const Promise = require('bluebird'); 
var performanceMetricsDriver = { 

    recordPerfMetrics: function(url) { 
     var self = this; 
     var perf, loadTime, domInteractive, firstPaint; 
     var perfData = {};  
     fs.readFile('urls.txt', 'UTF-8', function (err,urls) { 
      if (err) { 
       return console.log(err); 
      } 

      var urls = urls.split("\n"); 
      urls.shift(); 

      urls.forEach(function(url) {  
       console.log(url); 
       self.getStats(url); 
      });  

      // console.log(colors.magenta("Starting to record performance metrics for " + url)); 
      // this.storePerfMetrics();      
     });  
    }, 

    getData: function(url) { 
     return new Promise(function (resolve, reject) { 
       console.log("NOW GETTING DATA FOR URL: " + url); 
       // if (err) { 
       //  Promise.reject("This erred out!!"); 
       // } else { 
       //  Promise.resolve(data); 
       //  console.log(data); 
       //  loadTime = (data.loadEventEnd - data.navigationStart)/1000 + ' sec'; 
       //  firstPaint = data.firstPaint; 
       //  domInteractive = (data.domInteractive - data.navigationStart)/1000 + ' sec'; 

       //  perfData = { 
       //   'URL' : url, 
       //   'firstPaint' : firstPaint, 
       //   'loadTime' : loadTime, 
       //   'domInteractive' : domInteractive 
       //  }; 
       // } 
      }).then(function(data, err) { 

      }); 
    }, 

    getStats: function(url) { 
     var self = this; 

      browserPerf(url, self.getData(url), { 
       selenium: 'http://localhost:4444/wd/hub', 
       browsers: ['chrome'] 
      }); 
    } 
} 

Я пытаюсь захватить данные, возвращаемых броузера-перфорация, но по какой-то причине это продолжает заблудших, и дает мне необработанную ошибку отбраковки

+0

Вы применяете обработчик '.then()' к обещанию, и вы используете данные INSIDE обработчиком '.then()'. Вот как работают результаты async. Возможный дубликат: [Как вернуть ответ от асинхронного вызова] (http://stackoverflow.com/questions/14220321/how-do-return-the-response-from-an-asynchronous-call). – jfriend00

+0

@ jfriend00: Я пытался сделать это, просто не слишком уверен, где это будет обрабатываться в вышеупомянутом случае. – pj013

ответ

0

Вы можете использовать только данные, полученные обещанием внутри обработчика .then(). Я не знаю точно, что вы пытаетесь сделать, но вот одна идея:

getStats: function(url) { 
    this.getData(url).then(function(data) { 
     browserPerf(url, data, { 
      selenium: 'http://localhost:4444/wd/hub', 
      browsers: ['chrome'] 
     }); 
    }); 
} 

Это предполагает, что .getData() возвращает обещание, что в конечном итоге получить разрешенное с вашими данными (то, что ваш код не отображается).

+0

У меня есть лучшее объяснение здесь, что я пытаюсь сделать: http://stackoverflow.com/questions/40229948/retrieve-data-from-a-callback-thats-in-a-promise – pj013

+0

@ jp310 - Если это все та же проблема, почему вы задали новый вопрос, а не просто отредактировали свой текущий вопрос, чтобы уточнить? – jfriend00

+0

мой плохой, я должен был сделать то же самое – pj013

Смежные вопросы