Как объединить результат обратного вызова асинхронной функции - PullRequest
3 голосов
/ 21 января 2020

Вот код для получения некоторой информации о сервере.

    cpu.usage()
    .then(info => {
        console.log(info);
    });

    cpu.free()
    .then(info => {
        console.log(info)
    });

    mem.info()
    .then(info => {
        console.log(info)
    });

Я хочу получить каждый результат в функции.

get_resource () {
   ...
   console.log(cpu_usage, cpu_free, mem_info);
};

Как я могу создать его?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 21 января 2020

Вы можете попытаться использовать async/await, чтобы сделать это:

var get_resource = async function () {
   var cpu_usage = await cpu.usage();
   var cpu_free = await cpu.free();
   var mem_info = await mem.info();

   console.log(cpu_usage, cpu_free, mem_info);
};

или

Promise.all([cpu.usage(), cpu.free(), mem.info()]).then(function (info) {
    console.log('cpu_usage:', info[0]);
    console.log('cpu_free:', info[1]);
    console.log('mem_info:', info[2]);
})
1 голос
/ 21 января 2020

Вы можете использовать Promise.all() следующим образом:

let cpuUsage = cpu.usage()
let cpuFree = cpu.free()
let memInfo = mem.info()

Promise.all([cpuUsage, cpuFree, memInfo]).then((values) => {
  console.log(values);
});

Если вы можете использовать ES6, то вы можете использовать деструктуризацию массива при получении результатов:

Promise.all([cpuUsage, cpuFree, memInfo]).then(([cpuUsageResult, cpuFreeResult, memInfoResult]) => {
  console.log(cpuUsageResult);
  console.log(cpuFreeResult);
  console.log(memInfoResult);
});
0 голосов
/ 21 января 2020

Ад обратного вызова

Это старый сценарий, когда вам придется вызывать вещи друг в друге

    cpu.usage()
    .then(cpu_usage => {
      cpu.free()
      .then(cpu_free => {
        mem.info()
        .then(mem_info => {
          console.log(cpu_usage, cpu_free, mem_info);
        });
      });
    });

Asyn c Ожидать

в этом сценарии вы создайте асинхронную функцию.

async function get_resource () {
    const cpu_usage = await cpu.usage();
    const cpu_free = await cpu.free();
    const mem_info = await mem.info();
   console.log(cpu_usage, cpu_free, mem_info);
};

Значение, присвоенное каждому const в асинхронной c функции, является тем же значением, которое вы получаете в качестве аргумента при обратном вызове then.

...