-1

当我写这个查询 sql 数据库的承诺时,我没有用 require 测试它,我只是直接从控制台中的节点运行 js 文件。现在我需要它在完成循环时返回数据,但我不知道如何。Promise 以及从 SQL 读取数据对我来说都是新的,所以我很高兴能让它工作。但是现在当我需要这个代码时

var dbData = new getDataSQL();

它返回 {} 而不是一大块数据。它完成了它的承诺,但没有返回数据。关于如何最好地返回数据的任何想法?

module.exports = function getDataSQL(){
//JSON OBJECTS
var dates = require('./JSON/dates.js');
var companies = require('./JSON/companies.js');
//SQL FUNCTION
var sqlConJS = require('./sqlCon.js');

function fn(retVal, i, startDate, endDate){
    data[i] = JSON.parse(retVal);
    var total = 0;
        for(var b = 0; b<Object.keys(data[i].result).length;b++){
            total = total + data[i].result[b].Amount
        }
        data[i].totalAmount = total;
        data[i].startDate = startDate;
        data[i].endDate = endDate;
    console.log("No= "+i,"Reccs= " + Object.keys(data[i].result).length,"StartDate=" + startDate,"EndDate=" + endDate, "Amount = " + Math.floor(total));
    dataP();
}
//INIT SQL QUERY
var data = [];
var incrDat = 0;
var dataPromise = function(i){
    return new Promise(function(resolve, reject){
        data[i]={};
        var sqlCon = new sqlConJS(fn, dates[i].startDate, dates[i].endDate, companies[9].company, i);
        if(dates.length===i)reject();
        else resolve();
    });
};
var dataP = function(){
    dataPromise(incrDat++).then().catch(function(){
        console.log("done!");
        console.log(data[0].result[0]["Posting Date"]);
        return data;
    });
}
dataP();
}
4

1 回答 1

-1

没关系,我明白了,回调函数!我还有很多东西要学。在顶部声明函数时添加 cbRetData。

module.exports = function getDataSQL(cbRetData){

在 Console.log("完成!"); 我放

cbRetData(data);

在主 js 脚本中,我们像这样创建函数 cbRetData

function cbRetData(retData){
    dbData = retData;
    console.log("retData to dbData coming in!");
    console.log(dbData);
}

我们在需要它之后调用 getDataSQL 函数,您只需像这样传递函数 cbRetData 即可。

var getdbData = new getDataSQL(cbRetData);

我才刚刚开始接受回调函数等。

于 2015-06-15T10:45:05.793 回答