首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs - async function - TypeError:无法设置未定义的“temperature”属性

Nodejs - async function - TypeError:无法设置未定义的“temperature”属性
EN

Stack Overflow用户
提问于 2020-04-27 08:13:01
回答 1查看 105关注 0票数 0

JavaScript初学者在这里,我正在尝试使用hap-nodejs模块在Nodejs中运行一些东西。

我的主文件如下所示:

代码语言:javascript
复制
const config = require('../config');
const Syno = require('synology');
const docker = new Docker(config.dockerode);
const storage = require('node-persist');
const os = require('os');
storage.initSync();
const {Bridge, uuid, Categories} = require('hap-nodejs');
const TemperatureSensorAccessory = require('./TempGageAccessory');

const name = config.bridge.deviceName.replace('$hostname', os.hostname()).replace(/\./, ' ');
const bridge = new Bridge(name, uuid.generate('Remote Bridge'));

bridge.publish({
    username: config.bridge.mac,
    port: config.bridge.port,
    pincode: config.bridge.pincode,
    category: Categories.BRIDGE
});

async function publishSynology()
{
    const dev = new TemperatureSensorAccessory('NAS_SYS_TEMP');
    bridge.addBridgedAccessories({
        accessory: dev.getAccessory()
    });
}

publishSynology();

和我的/TempGageAccessory.js文件,问题在这里:

代码语言:javascript
复制
const {Accessory, Service, Characteristic, uuid, Categories} = require('hap-nodejs');
const Syno = require('synology');
const {emitter, docker} = require('./DockerKit');

module.exports = class TemperatureSensorAccessory {
    constructor(name) {
        console.log('Constructing ' + name);
        this.TemperatureSensor = {
            name,
            model: 'Synology NAS Temperature Sensor',
            category: Categories.SENSOR,
            description: name,
            setTemperature:  function () {
                let syno = new Syno({
                    host    : '10.0.0.1',
                    port    : '5656',
                    secure  : 'true',
                    user    : 'user',
                    password: 'password'
                });

                syno.query('/webapi/entry.cgi', {
                    api    : 'SYNO.Core.System',
                    version: 1,
                    method : 'info'
                }, function(err, data) {
                    if (err) return console.error(err);
                    console.log(data['data']['sys_temp']);
                    this.temperature = parseFloat(data['data']['sys_temp']);
                    return parseFloat(data['data']['sys_temp']);
                });
            },
            temperature: 0.0,
            getTemperature: async function () {
                console.log('[' + name + '] Getting Temperature' + this.temperature);
                return this.temperature;
            },
            uuid: uuid.generate('hap-nodejs:accessoires:temperaturesensor:synology:' + name),
            accessory: null
        };
        const that = this;
        that.TemperatureSensor.setTemperature();
        that.getAccessory().getService(Service.TemperatureSensor).getCharacteristic(Characteristic.On).updateValue(that.TemperatureSensor.temperature);

     }

    getAccessory() {
        if (!this.TemperatureSensor.accessory) {
            let acc;
            acc = new Accessory(this.TemperatureSensor.name, this.TemperatureSensor.uuid);
            acc.username = '8a:bc:80:74:de:16';
            acc.pincode = '123-45-678';
            acc
                .addService(Service.TemperatureSensor, this.TemperatureSensor.name)
                .getCharacteristic(Characteristic.CurrentTemperature)
                .on('get', async(cb) => {

                    // return our current value
                    cb(null, await this.TemperatureSensor.getTemperature());
                  });
            this.TemperatureSensor.accessory = acc;
            return acc;
        } else return this.TemperatureSensor.accessory;
    }
};

我得到了几乎所有的东西,我的rest调用工作得很好,我正在返回我的数据。但是当我尝试将查询结果赋给属性temperature时,我得到了以下错误:

TypeError:无法设置未定义的“temperature”属性

有人能解释一下我做错了什么吗?我不是Javascript开发人员,第一次使用它来自C#/Python。

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 03:47:16

初学者错误,通过裁判到正确的对象修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61449823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档