我有一个函数返回使用方法创建的数组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); });
}
我该怎么办?
谢谢!
答案 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); });
}