【问题标题】:How to retrieve the data being returned from the promise?如何检索从 Promise 返回的数据?
【发布时间】:2016-10-24 15:22:09
【问题描述】:

我正在使用 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'] 
            });
    } 
}

我正在尝试捕获浏览器性能返回的数据,但由于某种原因,这不断出错并给我一个未处理的拒绝错误

【问题讨论】:

  • 您将.then() 处理程序应用于promise,并使用.then() 处理程序内部的数据。这就是异步结果的工作方式。可能重复:How do I return the response from an asynchronous call.
  • @jfriend00:我试过这样做,只是不太确定在上述情况下会在哪里处理。

标签: javascript node.js browser promise bluebird


【解决方案1】:

您只能在 .then() 处理程序中使用由 Promise 返回的数据。我不知道你到底想做什么,但这里有一个想法:

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

这假定 .getData() 返回一个承诺,该承诺最终将通过您的数据得到解决(您的代码未显示)。

【讨论】:

  • 我在这里对我想要做的事情有更好的解释:stackoverflow.com/questions/40229948/…
  • @jp310 - 如果这仍然是同一个问题,你为什么要提出一个新问题而不是仅仅编辑你当前的问题来澄清?
猜你喜欢
  • 2017-01-01
  • 2019-04-22
  • 2018-04-07
  • 2019-05-01
  • 2021-03-17
  • 1970-01-01
  • 2020-05-18
  • 2017-11-16
  • 1970-01-01
相关资源
最近更新 更多