Javascript 在处理结果之前,我如何等待结果?
我不熟悉Node,并且试图理解回调和承诺。我正在使用一个开源HTTP基准模块从特定URL中提取数据,并在得到数据后处理结果。这是我的密码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
'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)
吗?它似乎并不等待结果发布。