当promise在require中完成时返回一个对象

时间:2015-06-15 10:24:30

标签: javascript node.js promise return-value tedious

当我写这个查询sql datbase的承诺时,我没有用require测试它,我只是直接从控制台中的节点运行js文件。现在我需要它来完成循环时返回数据,我无法弄清楚如何。承诺以及从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();
}

1 个答案:

答案 0 :(得分:-1)

没关系,我得到它,回调函数offcourse!我还有很多需要学习的东西。在顶部声明函数时添加cbRetData。

{
 "name": "nutrinext",
 "version": "0.0.0",
 "dependencies": {
  "angular": "~1.3.1",
  "angular-bootstrap": "~0.11.2",
  "angular-timeago": "~0.1.3",
  "angular-ui-router": "~0.2.11",
  "ngstorage": "~0.3.0",
  "bootstrap": "~3.3.0",
  "bootstrap-markdown": "~2.7.0",
  "jquery": "1.10.2",
  "fastclick": "~1.0.3",
  "fontawesome": "~4.2.0",
  "pubnub": "~3.6.4"
 },
"devDependencies": {},
"resolutions": {
  "angular": "~1.3.1",
  "bootstrap": "~3.3.0"
 }
}
在Console.log下的

(“完成!”);我把

module.exports = function getDataSQL(cbRetData){

在主js脚本中我们创建函数cbRetData,如此

cbRetData(data);

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

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

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