nodejs windows exe c обещание в ожидании - PullRequest
0 голосов
/ 06 января 2020

Я бегу exec, чтобы получить идентификатор от компьютерного оборудования. Я пытаюсь присвоить идентификатор переменной cpu_id, чтобы я мог использовать его позже в своем скрипте в параметре http-запроса. Когда консольный журнал, кажется, всегда выводит Promise { <pending> } вместо захваченного идентификатора.

Я играл с wait и asyn c, но не мог заставить вещи работать так, как они должны. любая помощь или указатели будут с благодарностью.

function get_cpu_id() {
    if (process.platform === "win32") {
        return execShellCommand('wmic csproduct get UUID /format:list').then(function(std){
            return std.replace(/\s/g, '').split("=")[1];
        });
    } else {
        return execShellCommand('cat /proc/cpuinfo | grep Serial').then(function(std){
            return std;
        });
    }
}

function execShellCommand(cmd) {
    const exec = require('child_process').exec;

    return new Promise((resolve, reject) => {
        exec(cmd, (error, stdout, stderr) => {
            if (error) {
                console.warn(error);
            }

            resolve(stdout ? stdout : stderr);
        });
    });
}

let cpu_id = get_cpu_id();

console.log(cpu_id);

1 Ответ

1 голос
/ 06 января 2020

Exe c возвращает обещание. Попробуйте использовать execSync:

const execSync = require('child_process').execSync;

function get_cpu_id() {
    if (process.platform === "win32") {
        return execSync('wmic csproduct get UUID /format:list').toString();
    } else {
        return execSync('cat /proc/cpuinfo | grep Serial').toString();
    }
}


let cpu_id = get_cpu_id();

console.log(cpu_id);
...