繁体   English   中英

如何在Node.js中的回调内部调用外部函数

[英]How to call external function inside callback in nodejs

就像在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行返回未定义。

您需要进行更改以将函数放入回调中,还需要向函数中添加回调,因为express可以使用必须同步运行或返回承诺或具有签名(req)的签名(req,res)定义中间件。 ,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
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM