Javascript 在处理结果之前,我如何等待结果?

Javascript 在处理结果之前,我如何等待结果?,javascript,node.js,Javascript,Node.js,我不熟悉Node,并且试图理解回调和承诺。我正在使用一个开源HTTP基准模块从特定URL中提取数据,并在得到数据后处理结果。这是我的密码 'use strict' const autocannon = require('autocannon') const instance = autocannon({ url: 'http://localhost:3000', connections: 5, duration: 5 }, (err, resu

我不熟悉Node,并且试图理解回调和承诺。我正在使用一个开源HTTP基准模块从特定URL中提取数据,并在得到数据后处理结果。这是我的密码

'use strict'

const autocannon = require('autocannon')

const instance = autocannon({
        url: 'http://localhost:3000',
        connections: 5,
        duration: 5
}, (err, result) => handleResults(result))

async function handleResults (res){
    try{
        let abReport = [];
        abReport.push(
          'Test Completed:' + '\n' +
          'Time taken for tests:' + res.duration + '\n' +
          'Total Concurrent Connections:' + res.connections + '\n' +
          'URL:' + res.url + '\n' +
          'Total Errors:' + res.errors + '\n' +
          'Total Timeouts:' + res.timeouts + '\n'
        )
        console.log(abReport.join('\n'));
    }
    catch(error) {
            console.error(error);
    }
}
autocanon
正在将输出传递给handleResults,但handleResults errors发出错误
TypeError:无法读取未定义的属性“duration”
。我正试图找到一种方法,使HandlerResults仅在值成功从autocannon传递后才能处理。

(err,result)=>HandlerResults(result)
更改为

(err, result) => {
   if (err != null) return; // or do some error handling
   handleResults(result);
}

使用async await,您可以更新代码

'use strict'

const autocannon = require('autocannon');

async function handleResults (res){
    try{
        let abReport = [];
        abReport.push(
          'Test Completed:' + '\n' +
          'Time taken for tests:' + res.duration + '\n' +
          'Total Concurrent Connections:' + res.connections + '\n' +
          'URL:' + res.url + '\n' +
          'Total Errors:' + res.errors + '\n' +
          'Total Timeouts:' + res.timeouts + '\n'
        )
        console.log(abReport.join('\n'));
    }
    catch(error) {
        console.error(error);
    }
}

const getAbReport  = async () => {
    try {
            const result = await autocannon({
            url: 'http://localhost:3000',
            connections: 5,
            duration: 5,
        });
        await handleResults(result);
    } catch(error) {
        console.log(error);
    }
}

getAbReport();

我使用以下代码使其工作:

'use strict'

const autocannon = require('autocannon');

const getAbReport  = async () => {
    try {
        const instance = await autocannon({
            url: 'http://localhost:3000',
            connections: 5,
            duration: 5
        }, (err, result) => handleResults(result));
    } catch(error) {
        console.log(error);
    }
}

async function handleResults(result) {
    try{
        let abReport = [];
        abReport.push(
          'Test Completed:' + '\n' +
          'Time taken for tests:' + result.duration + '\n' +
          'Total Concurrent Connections:' + result.connections + '\n' +
          'URL:' + result.url + '\n' +
          'Total Errors:' + result.errors + '\n' +
          'Total Timeouts:' + result.timeouts + '\n'
        )
        console.log(abReport.join('\n'));
    }
    catch(error) {
        console.error(error);
    }
}

getAbReport();

为什么将
handleResults
声明为
async
函数?它实际上是一个回调函数,没有返回。您能在
handleResults
功能中显示
console.log(res)
吗?它似乎并不等待结果发布。