2016-10-24 2 views
0

브라우저 성능의 결과를 얻으려면 browser-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()'핸들러를 promise에 적용하고'.then()'핸들러 내부에 데이터를 사용한다. 이것이 비동기 결과가 작동하는 방식입니다. 가능한 복제본 : [비동기 호출에서 응답을 반환하는 방법] (http://stackoverflow.com/questions/14220321/how-do-i-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

관련 문제