Javascript console.log返回挂起的承诺,而不是实际数据

Javascript console.log返回挂起的承诺,而不是实际数据,javascript,json,typescript,asynchronous,Javascript,Json,Typescript,Asynchronous,所以我有这个文件: 'use strict' import * as moment from "moment"; import { Report} from "./Report"; import { Timeframe} from "./Timeframe"; import { ReportComparison } from "./ReportComparison"; function test(firstFrom: string, firstTo: string, secondFrom:

所以我有这个文件:

 'use strict'
import * as moment from "moment";
import { Report} from "./Report";
import { Timeframe} from "./Timeframe";
import { ReportComparison } from "./ReportComparison";

function test(firstFrom: string, firstTo: string, secondFrom: string, secondTo: string) {


    var pastReport = new Report(new Timeframe(moment(firstFrom), moment(firstTo)));
    var laterReport = new Report(new Timeframe(moment(secondFrom), moment(secondTo)));

    var reportComparison

    function getData(pastReport: Report, laterReport: Report) {

        var later = function() {
            return new Promise((resolve, reject) => {
                laterReport.fetchData(data => resolve(data));
            });
        };

        var past = function() {
            return new Promise((resolve, reject) => {
                pastReport.fetchData(data => resolve(data));
            });
        };

        return Promise.all([later(), past()]).then(() => {
            laterReport.sort();
            reportComparison = new ReportComparison(pastReport, laterReport);

            return {
                pastReport: {
                    projects: reportComparison.pastReport.projects,
                    timeFrame: reportComparison.pastReport.timeframe,
                    totalAutomatedRuns: reportComparison.pastReport.totalAutomatedRuns,
                    totalManualRuns: reportComparison.pastReport.totalManualRuns

                },
                laterReport: {
                    projects: reportComparison.laterReport.projects,
                    timeFrame: reportComparison.laterReport.timeframe,
                    totalAutomatedRuns: reportComparison.laterReport.totalAutomatedRuns,
                    totalManualRuns: reportComparison.laterReport.totalManualRuns
                },
                trends: reportComparison.trends
            }

        });

    }

    return getData(pastReport, laterReport).then((res) => {
        return res;
    });

}



console.log(test("20170707", "20170707", "20170710", "20170710"))
现在,console.log返回的是
Promise{}
,而不是我想要返回的实际值(JSON对象)。我正确地处理了这个异步代码吗?我可以使用什么解决方案将JSON作为值返回,而不是作为挂起的承诺返回

方法测试确实返回了一个承诺。要访问数据,请调用.then()函数

test("20170707", "20170707", "20170710", "20170710")
    .then((response) => {
         console.log(response);
    });
方法测试确实返回了一个承诺。要访问数据,请调用.then()函数

test("20170707", "20170707", "20170710", "20170710")
    .then((response) => {
         console.log(response);
    });

是的,只有当你从这里回报承诺时,你才会得到承诺

返回getData(pastReport,laterReport)。然后((res)=>{

这是您的主要返回,我指的是测试函数的返回值,您只返回了promise,请注意,从那时起返回的内容将仅在该函数中返回,因此它不会反映在测试的返回值中。 如果不想更改代码,可以使用回调函数

或者改成

返回getData(pastReport、laterReport)

然后像这样打测试电话

test(...).then((res)=>{ 
})
Or like this
var a = await test(...)
then test will return data.

是的,只有当你从这里回报承诺时,你才会得到承诺

返回getData(pastReport,laterReport)。然后((res)=>{

这是您的主要返回,我指的是测试函数的返回值,您只返回了promise,请注意,从那时起返回的内容将仅在该函数中返回,因此它不会反映在测试的返回值中。 如果不想更改代码,可以使用回调函数

或者改成

返回getData(pastReport、laterReport)

然后像这样打测试电话

test(...).then((res)=>{ 
})
Or like this
var a = await test(...)
then test will return data.

@Bergi FWIW最初在那里有一个额外的
控制台。log
,它被编辑出来用于clarity@BergiFWIW原来有一个额外的
控制台。日志
在那里-它是为Clarity而编辑的。这实际上并不能解决我的问题。我希望
测试
实际上是json对象。您的解决方案只是使用
然后
为了保持管道化信息,永远不要返回它您的get data将正确返回它??我通过此调用返回承诺
return getData(pastReport,laterReport)
,然后将获取json对象,这样您的json对象将处于res@adamSiwiec是的,你需要学习如何处理承诺。在承诺兑现之前,你想要返回的数据是不可用的。是的,我理解@YashGanatra,但有没有一种方法可以让测试保持该值而不是res?这是我的问题。这不正确我不想真正解决我的问题。我希望
test
实际上是json对象。你的解决方案只是使用
then
来持续管道传输信息,永远不返回它。你的get data将正确返回它??我通过这个调用返回承诺
return getData(pastReport,laterReport)
,然后将获取json对象,这样您的json对象将处于res@adamSiwiec是的,确实如此,你需要学习如何处理承诺。在承诺兑现之前,你想要返回的数据是不可用的。是的,我理解@YashGanatra,但有没有一种方法可以让测试保持该值而不是res?这是我的问题。