node.js - NodeJs - 一起编写异步和非异步函数
问题描述
这是我的模块,x
返回为undefined
.
const si = require('systeminformation');
async function systemData() {
try {
let data = await si.system()
return {
manufacturer: data.manufacturer,
model: data.model
}
} catch (err) {
console.log(`${err}`)
}
}
function checkSystemData() {
(async () => {
let sd = await systemData()
if (sd.manufacturer === 'X') { // Many more such checks
} else {
return { check: false, manufacturer: sd.manufacturer }
}
})()
}
let x = checkSystemData()
console.log(x)
checkSystemData()
不能由其作者制作,async
因为它是更大模块的一部分。如何将其重构为x
接收{ check: false, manufacturer: sd.manufacturer }
?
解决方案
你需要从 checkSystemData() 返回一些东西
return (async () => { // add return
let sd = await systemData()
if (sd.manufacturer === 'X') { // Many more such checks
} else {
return { check: false, manufacturer: sd.manufacturer }
}
})()
那么你可以使用
checkSystemData().then(response => {
console.log(response)
})
或者
let x = await checkSystemData()
推荐阅读
- python - 在滚动窗口中出现 2 个或更多值时查找最大值
- r - Reset event_data using shinyjs doesn't seem to work anymore, after the recent update
- linux - 如何计算文件在linux上执行的次数
- facebook - Apache2 proxy to spring-boot app, problem with Oauth2
- django - 将 Django 表单向导数据保存到三个具有相关字段的模型
- r - eval 中的错误(predvars,data,env):找不到对象
- asp.net-mvc - 如何使用 dotnet 构建 .NET Framework ASP.NET 应用程序
- c# - Where is the error in my syntax? Getting values from SQL Server database
- c# - DataTable.compute() 值对于 Int32 来说太大或太小
- powershell - Send Message if Account is Locked Out