【问题标题】:empty array outside of function函数外的空数组
【发布时间】:2016-03-15 13:55:41
【问题描述】:

在函数之外接收一个空数组?

var triggerImageQuery = function(start, length,callback) {
  var feedData = [];
  var feedInfo = result.rows[start];
  var imgQuery = pgFormat("select * from feedImages where feedId=%L",feedInfo.feedid);
    model.client.query(imgQuery,function(err,result){
        if(result.rows.length > 0){
            var imgArr =[];
            for(var j=0;j<result.rows.length;j++){
                    var image = "http://"+config.host+":"+config.port+"/"+result.rows[j].imageurl;
                        imgArr.push(image);
            }
            feedData.push(feedInfo);
            feedData.push(imgArr);
        }
        else{
            feedData.push(feedInfo);
        }
console.log(feedData) // prints data correctly
    });
console.log(feedData) // here data gets empty?
    if(start < length) {
        start++;
        triggerImageQuery(start, length-1);
    }
    callback(feedData); // unable to callback here because of empty array`
}
triggerImageQuery(0, result.rows.length,function(result){
    res.json(result); // `result is empty`
});

即使我尝试过声明 var feedData = [];在顶部,但没有用。

还尝试了model.client.query中的回调,但是出现了TypeError之类的错误:回调不是函数。

【问题讨论】:

  • 您的 model.client.query 调用是异步的 - 因此您的空日志会在查询完成之前执行。您需要在该调用的回调中完成所有工作。
  • 甚至我已经测试了model.client.query中的回调(feedData),它抛出了像TypeError这样的错误:回调不是函数

标签: node.js express


【解决方案1】:

只需要在client.query方法中返回数据。

var triggerImageQuery = function (start, length, callback) {
    var feedData = [];
    var feedInfo = result.rows[start];
    var imgQuery = pgFormat("select * from feedImages where feedId=%L", feedInfo.feedid);
    model.client.query(imgQuery, function (err, result) {
        if (result.rows.length > 0) {
            var imgArr = [];
            for (var j = 0; j < result.rows.length; j++) {
                var image = "http://" + config.host + ":" + config.port + "/" + result.rows[j].imageurl;
                imgArr.push(image);
            }
            feedData.push(feedInfo);
            feedData.push(imgArr);
        }
        else {
            feedData.push(feedInfo);
        }
        console.log(feedData) // here data gets empty?
        if (start < length) {
            start++;
            triggerImageQuery(start, length - 1);
        }
        callback(feedData);
    });
}
triggerImageQuery(0, result.rows.length, function (result) {
    res.json(result); // `result is empty`
});

【讨论】:

  • 也试过了,但是有 TypeError: callback is not a function
猜你喜欢
  • 2017-06-14
  • 2014-11-20
  • 1970-01-01
  • 2019-09-27
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多