【发布时间】:2020-09-07 07:24:05
【问题描述】:
这是我的模块,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同步返回结果,则需要找到si.system()的同步版本。但实际上,您应该让它异步,并让函数的用户处理它。 -
@Bergi 这是一个已有的项目,有一些“历史”。所以,后果是相当高的,我希望尽量减少“爆炸半径”。 :)
-
正如 Bergi 所说,根本不可能。异步派生的数据不能同步返回。引入中间函数并不能解决问题。
标签: node.js function promise async-await undefined