Узел.JS асинхронное отображение «Обещания» в возвращаемых данных

#javascript #node.js #asynchronous

#javascript #node.js #асинхронный

Вопрос:

У меня есть следующее node.js вызов функции и функция

 var returned = checkCurrentProcesses()
    returned.then(() => {
        console.log(returned)

    })

function checkCurrentProcesses() {
    return new Promise(function(resolve, reject){
        exec('pgrep -u user123 -x node  -a', (err, cmdOutput, stderr) => {
            if (err) {
                reject({error:err})
            }
            else{
                resolve({output:cmdOutput})
            }
        });
    })

}
  

Это успешно перезапускает нужные мне данные, однако возвращает их так, как я не понимаю. Я ожидаю получить возврат разрешенного условия, которое является объектом. Но когда я console.log (возвращенный), вывод выглядит следующим образом, а данные представляют собой объект в объекте, и я не могу получить к нему доступ.

 Promise { { output: '26278 node nodeMasterServer.js listn' } }
  

Даже если я упрощу код, возврат будет в том же формате.

 function checkCurrentProcesses() {
    return new Promise(resolve =>{
        resolve({thisIs:"aTest"})
    })
}

Promise { { thisIs: 'aTest' } }
  

Что вызывает такое поведение и как я могу это исправить?

Ответ №1:

Вы почти на месте, вам нужно передать данные в then обратный вызов как так:

 var returned = checkCurrentProcesses()
    returned.then((data) => { // can be any name you want
        console.log(data) // the object you are expecting

    })

  

Комментарии:

1. Спасибо! вывод теперь отображается правильно как { thisIs: 'aTest' }