节点函数调用另一个函数并返回未定义

时间:2021-01-25 13:36:03

标签: javascript node.js callback

我在 nodejs 中有以下代码:

const unifi = require('node-unifi');

const controller = new unifi.Controller(IP_ADDRESS, 8443);

function login(apiCall) {
  controller.login(USERNAME, PASSWORD, function (err) {
    if (err) {
      console.log('ERROR: ' + err);
      return;
    }
    apiCall();
  });
}

function getAllClients(site) {
  login(function () {
    controller.getClientDevices(site, (res, data) => {
      console.log(data);
    });
  });
}

getAllClients('siteid');

在原始调用中,任何函数都需要在 login() 中调用,因此只能在登录时调用。 当我调用函数 getAllCients(siteID) 时,我在 console.log 中得到了想要的结果。但是为了上帝的爱,我无法从另一个文件中的函数返回结果,我需要该函数。总是未定义。

我假设我需要使用回调,但在阅读了多个论坛(即 art of node)后,我并不明智地使用回调。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

感谢 @VLAZ 为我指明了正确的方向 :-)

我编辑后的代码:

function getAllClients(site) {
  return new Promise(function (resolve, reject) {
    login(function () {
      controller.getClientDevices(site, (err, data) => {
        if (!err) {
          resolve(data);
        }
      });
    });
  });
}

我改变的只是返回承诺,然后我在另一个文件中使用 .then()

谢谢!