像在javascript中一样调用nodejs中的外部函数,以便我们可以重用该函数,但在我的情况下它不起作用。为什么呢?
我猜它在nodejs中是异步工作的。我该如何解决?回调?我是nodejs的新手。
app.get('/googleSyncCallback', passport.authenticate('google', {
failureRedirect: 'url'
}),
function(req, res) {
var contacts = new GoogleContacts({
token: req.token
});
var retrievedContacts = '';
var retrievedContactsArr = [];
contacts.getContacts(function(err, contacts) {
contacts.forEach(function(entry) {
retrievedContacts = {
contact: {
"phone": {
"cell": entry.phoneNumber,
}
},
}
retrievedContactsArr.push(retrievedContacts);
console.log('array... ', retrievedContactsArr[0]); //prints all values
});
});
checkIfContactExists(req, res, retrievedContactsArr);
}
});
function checkIfContactExists(req, res, retrievedContactsArr) {
//PRINTS UNDEFINED..
console.log('array... ', retrievedContactsArr[0]); //// LINE 10
}
打印数组retrievedContactsArr[0]
在第10行返回undefined。
答案 0 :(得分:0)
您需要更改以将您的函数放入回调函数中,您还需要向函数添加回调函数,因为Express可以使用必须同步运行的签名(req,res)定义中间件,或者返回一个promise或者具有签名(req,res,next)其中next是回调。
app.get('/googleSyncCallback', passport.authenticate('google', {
failureRedirect: 'url'
}),
function(req, res, next) {
var contacts = new GoogleContacts({
token: req.token
});
var retrievedContacts = '';
var retrievedContactsArr = [];
contacts.getContacts(function(err, contacts) {
contacts.forEach(function(entry) {
retrievedContacts = {
contact: {
"phone": {
"cell": entry.phoneNumber,
}
},
}
retrievedContactsArr.push(retrievedContacts);
console.log('array... ', retrievedContactsArr[0]);
checkIfContactExists(req, res, retrievedContactsArr);
next()
});
});
}
});
function checkIfContactExists(req, res, retrievedContactsArr) {
//PRINTS UNDEFINED..
console.log('array... ', retrievedContactsArr[0]); //// LINE 10
}