Node.js – 从函数返回数组

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

在路由器文件中,我做了这个,但它没有工作:

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语句, 有用!

恢复function代码:

 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); }); } 

我能怎么做?

谢谢!

你不能从callback中返回

  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); }); } 

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