использование операторов ожидания несовместимо - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь получить данные из API с разных конечных точек (IP-адресов) с помощью оператора await. Кажется, для одних это работает, для других - нет Однако, когда я использую операторы «then» (закомментированный код), это работает для всех.

Цель состоит в том, чтобы сохранить файл журнала .txt. Результат будет одинаковым для сохраненного файла .txt и для ведение журнала консоли

Любая помощь приветствуется. Спасибо!

Вот мой код, который извлекает и регистрирует данные.

class Status {
    async doFetch(api, ep) {
          // api.status.get('SystemUnit ProductId')
    //     .then(res => {
    //         console.log(res)
    //         this.acc += res + '\r\n'
    //     }).then( () => {
    //         api.status.get('UserInterface ContactInfo Name')
    //             .then(name => {
    //                 console.log(name)
    //                 this.acc += name + '\r\n';
    //             })
    //     })
        function timeout(ms) {
            return new Promise(resolve => setTimeout(resolve, ms));
        }

        const PRODUCT_ID = await api.status.get('SystemUnit ProductId');
        const SYSTEM_NAME = await api.status.get('UserInterface ContactInfo Name');
        const SOFTWARE_VERSION = await api.status.get('SystemUnit Software Version');
        const MAC_ADDRESS = await api.status.get('Network 1 Ethernet MacAddress');
        const TEMPERATURE = await api.status.get('SystemUnit Hardware Temperature');
        const SIP_Registration_Status = await api.status.get('SIP Registration 1 Status');
        const SIP_Proxy_Address = await api.status.get('SIP Proxy 1 Address');
        const SIP_Registration_URI = await api.status.get('SIP Registration 1 URI');

 await timeout(500);

        return`Product ID: ${await PRODUCT_ID}\r\n
System name: ${await SYSTEM_NAME}\r\n
IP address: ${ep}\r\n
Software version: ${await SOFTWARE_VERSION}\r\n
MAC address: ${await MAC_ADDRESS}\r\n
Temperature: ${await TEMPERATURE}˚\r\n
Sip registration status: ${await SIP_Registration_Status}\r\n
Sip proxy address: ${await SIP_Proxy_Address}\r\n
Sip registration URL: ${await SIP_Registration_URI}\r\n\r\n
`;        
    }
}

(function() {
    const server = new Server(1000);
    logs.config(FILE_NAME, DIR);
    let api;
    let ep;
    const toRun = (body) => {
        api = body.api;
        ep = body.endpoint
        const s = new Status();
        if (ep !== '' && ep !== undefined)
            s.doFetch(api, ep)
                .then(acc => {
                    console.log(acc)
                    logs.buildString(acc);
                })
                .catch(err => {
                    if (err.code !== 3)
                        console.error(err);
                });
    }
    server.runCommand(toRun, logs.save)
})()

1 Ответ

0 голосов
/ 22 июня 2020

Я пробовал это обойти:

`

        let PRODUCT_ID;
        let SYSTEM_NAME;
        let SOFTWARE_VERSION;
        let MAC_ADDRESS;
        let SIP_Registration_Status;
        let SIP_Proxy_Address;
        let SIP_Registration_URI;
        let TEMPERATURE;

        try {                       
            PRODUCT_ID = await api.status.get('SystemUnit ProductId');
            SYSTEM_NAME = await api.status.get('UserInterface ContactInfo Name');
            SOFTWARE_VERSION = await api.status.get('SystemUnit Software Version');
            MAC_ADDRESS = await api.status.get('Network 1 Ethernet MacAddress');                        
            SIP_Registration_Status = await api.status.get('SIP Registration 1 Status');
            SIP_Proxy_Address = await api.status.get('SIP Proxy 1 Address');
            SIP_Registration_URI = await api.status.get('SIP Registration 1 URI');
            TEMPERATURE = await api.status.get('SystemUnit Hardware Temperature');            
        } catch (err) {            
            if (err.code == 3 || err.data.xpath === 'Status/SystemUnit/Hardware/Temperature') {
//THIS WORKS FOR THE REST OF ENDPOINTS IF THE FIRST ONE FAILS
                TEMPERATURE = await api.status.get('SystemUnit Hardware Monitoring Temperature Status');                
            } else console.error(err);
        }
        finally {
            timeout(500);
            return`
Product ID: ${PRODUCT_ID}\r\n
System name: ${SYSTEM_NAME}\r\n
IP address: ${ep}\r\n
Software version: ${SOFTWARE_VERSION}\r\n
MAC address: ${MAC_ADDRESS}\r\n
Sip registration status: ${SIP_Registration_Status}\r\n
Sip proxy address: ${SIP_Proxy_Address}\r\n
Sip registration URL: ${SIP_Registration_URI}\r\n
Temperature: ${TEMPERATURE}\r\n\r\n
`;
        }
    

`

...