Javascript promise的返回值是未定义的Node.Js

Javascript promise的返回值是未定义的Node.Js,javascript,node.js,postgresql,openwrt,Javascript,Node.js,Postgresql,Openwrt,我正在使用UBU与物理设备通信,我正在尝试设置一个配置,然后使用该结果提交到设备内部的文件(写入),但我总是从uci请求中得到未定义的内容,但在功能中,我得到了ubus代码[0] ServicesController.prototype.updateWifi = function (req, res, next) { createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'update

我正在使用UBU与物理设备通信,我正在尝试设置一个配置,然后使用该结果提交到设备内部的文件(写入),但我总是从uci请求中得到未定义的内容,但在功能中,我得到了ubus代码[0]

ServicesController.prototype.updateWifi = function (req, res, next) {
    createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'updateWifi', 'begin');
    var data = req.body;
    var state;
    if(data.state=="1"){
        state=1;
    } else if(data.state=="0"){
        state=0;
    }
    if (isEmptyObject(data)) {
        res.status(400).send({error: errorMessage.emptyBody});
        return;
    }

    if (data.sn === undefined || data.sn === "") {
        createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'updateWifi', 'Invalid serial number');
        res.status(400).send({error: "Invalid serial number"});
        return;
    }

     Database.Devices.getDeviceBySn(data.sn).then(function (device) {
        createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'updateWifi', 'device', device);
        createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'updateWifi', 'device.id', device[0].id);

        var ifname=data.ifname;
        return ServicesController.prototype.uci(device[0], "teste_wireless", "wifi", ifname, "disabled", data.state, true, true).then(function(wifiData){
            console.log('updateWifi ---> data',wifiData);
            if (wifiData != undefined) {
                res.status(404).end();
            } else {
                console.log('updateDeviceInterface ', device[0].id, ' for ', ifname, ' to ', state);
                Database.Services.updateWifiDeviceInterface(device[0].id, ifname, state);
                res.status(200).send(wifiData);
            }
        }).catch(function (e) {
            createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'updateWifi', e);
            res.status(500).send(e);
        });
    });
}
ServicesController.prototype.uci=函数(设备、配置、路径、节、选项、值、应用、提交){ var值={opt:value}

return Controllers.Ubus.uciRequest('set', {"config": config, "section": section, values}, device)
  .then(function (uciData) {
    var promises = [];

    if (uciData!=null) {
        createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uci', 'depois do if do uciData' );

        if (commit){
            createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'commit');
            var p1 = Controllers.Ubus.uciRequest('commit', {"config": config}, device)
              .then(function (dataCommit) {
                if (dataCommit && dataCommit.hasOwnProperty('result') && data.result[0] == 0) {
                  createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'commit data', dataCommit);
                  return dataCommit.result[1];
                }
              })
          promises.push(p1);
        }

        if(apply){
            createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'apply');
            var p2 = Controllers.Ubus.fileExec(device.id, "exec", path, "restart")
              .then(function (dataApply) {
                if (dataApply && dataApply.hasOwnProperty('result') && data.result[0] == 0) {
                  createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), null, 'uci', 'apply data', dataApply);
                  return dataApply.result[1];
                }
            })
          promises.push(p2);
        }
    }
    return Promise.all(promises);
}
我的问题是这个函数没有返回任何值,但我得到了ubus状态码[0]

UbusController.prototype.uciRequest = function(procedure, signature, device) {
  createLog('info', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'inicio');
  createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'device id', device.id);
  createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'procedure', procedure);
  createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'signature', signature);
    var res;
  return Controllers.Ubus.getSession(device.id).then(function(dataAuth) {
    createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'dataAuth', dataAuth);
    if (dataAuth) {
      return Controllers.Ubus.execCommand(device.id, 'uci', procedure, signature).then(function(data) {
        createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'data', data);
        if (data.result) {
          if (data.result[0] == 0) {
              res = data.result[1];
            return res;
          }
        }
        throw new Error("no data");
      });
     createLog('debug', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', 'dataResuult', res);
    }

    throw new Error("no dataAuth");
  }).catch(function(e) {
    createLog('error', __dirname, __filename.slice(__dirname.length + 1, -3), device.id, 'uciRequest', e);
    throw e;
  });
}
当我在此日志
console.log('updateWifi-->data',wifiData)
中打印updateWifi tha数据时,它返回未定义的值。是否要从函数ServicesController.prototype.uci返回值


这里的所有代码:

避免!并在updateWifiuci函数中放置一个return。我不明白,我的问题来自UbusController.prototype.ucirest,因为结果未定义,我正在尝试从该函数返回值,并且我始终未定义UCIData在您的PRUNKR中的代码不是您在问题中发布的,您确实在那里返回了承诺。但是,除了
fileExec
,您不应该在任何地方使用
newpromise
构造函数。我能做什么?相反?正如我所说的,只返回从链接的
然后
catch
调用中得到的承诺。另见相关问题。