Node.js - 从函数返回数组

时间:2017-03-27 15:00:16

标签: arrays node.js function express

我有一个函数返回使用方法创建的数组myArray.push({“key”:value})

在路由器文件中我这样做了,但它不起作用:

router.get('/:ID', function(req, res, next) {
    var myRenderArray = [];
    myRenderArray = auxFunctions.myArrayFunc(req.params.ID);
    res.render('myView', {title: 'title', myRenderArray});
});

如果我将整个函数放在路由器文件中,并更改res.render('myView', {title: 'title', myRenderArray});的return语句就可以了!

恢复功能代码:

module.exports.myArrayFunc = function myArrayFunc(ID){
        var myArray = [];
        var id = req.params.ID;
        var req1 = new dbConfig1.Request(); 
        var req2 = new dbConfig2.Request();


        req1.query(query1('foo', ID)) 
        .then(function (array1) { 
                req2.query(query2('foo', id, array1[0].fooId))         
                .then(function (array2) {
                   req1.query(query3(array1[0].fooId))         
                    .then(function (array3) {
                        req1.query(query4('foo', ID, array1[0].fooId))      
                        .then(function (array4) {
                            myArray.push({
                                'name1': key1,
                                'name2': key2,
                                'name3': key3,
                                'name4': key4,                                
                            });

                            return myArray;
                        })



                        .catch(function (err) { console.log('****** Error on query 4'); console.log(err); });
                    })
                    .catch(function (err) { console.log('****** Error on query 3'); console.log(err); });
                })
                .catch(function (err) { console.log('****** Error on query 2'); console.log(err); });
        })
        .catch(function (err) { console.log('****** Error on query 1'); console.log(err); });
    }

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

这里代码的唯一相关部分正是您未在问题中包含的内容 - 不返回数组的函数的源代码。唯一的其他相关数据是错误消息。在没有看到代码或错误消息的情况下我只能猜测,但您可能在那里做了一些事情:您可能在数组中使用全局变量或外部作用域中的变量,并且它在调用之间共享。您可能正在使用res或请求处理程序中可用但在该函数中不可用的其他变量。这是所有的推测,因为你没有包含函数的源代码或错误消息,所以不可能给你更详细的信息。

答案 1 :(得分:1)

您无法从回叫

返回
  router.get('/:ID', function(req, res, next) {
    var myRenderArray = [];

    //use callback instead 
    auxFunctions.myArrayFunc(req.params.ID ,function(myRenderArray){

        if(myRenderArray){
         res.render('myView', {title: 'title', myRenderArray});
     }
 });

});


module.exports.myArrayFunc = function myArrayFunc(ID ,callback){
    var myArray = [];
    var id = req.params.ID;
    var req1 = new dbConfig1.Request(); 
    var req2 = new dbConfig2.Request();


    req1.query(query1('foo', ID)) 
    .then(function (array1) { 
        req2.query(query2('foo', id, array1[0].fooId))         
        .then(function (array2) {
           req1.query(query3(array1[0].fooId))         
           .then(function (array3) {
            req1.query(query4('foo', ID, array1[0].fooId))      
            .then(function (array4) {
                myArray.push({
                    'name1': key1,
                    'name2': key2,
                    'name3': key3,
                    'name4': key4,                                
                });

                //return using callback
                return callback(myArray);
            })



            .catch(function (err) { console.log('****** Error on query 4'); console.log(err); });
        })
           .catch(function (err) { console.log('****** Error on query 3'); console.log(err); });
       })
        .catch(function (err) { console.log('****** Error on query 2'); console.log(err); });
    })
    .catch(function (err) { console.log('****** Error on query 1'); console.log(err); });
}