我只需要做一个涉及Node GET调用的编码测试,解析返回的数据并将其返回给调用函数,以便可以将其打印到stdout。一切都很好,除了我无法弄清楚如何从内部异步函数中获取它,然后让外部函数返回它。据我所知,游戏规则是我只能在内部函数中的 内工作。
我想到的第一个迭代是这样的(我省去了原始测试所需数据的棘手处理)
const https = require('https')
function inner() {
let buff = ''
https.get('https://jsonplaceholder.typicode.com/posts', res => {
res.on('data', data => {
buff += data
})
res.on('end', () => {
return JSON.parse(buff)
})
})
}
function outer() {
const results = inner()
}
outer()
这是行不通的,因为从内部函数res.on('end',...)
返回不是从外部函数返回。
然后我想稍微修改游戏规则并使用await
,这需要我做内部功能async
。在一定程度上这是可行的。但是现在async
函数返回一个Promise,并且我无法控制外部函数的展开(这是测试环境的一部分)。
const https = require('https')
async function inner() {
let buff = ''
const get = () => new Promise((resolve, reject) => {
https.get('https://jsonplaceholder.typicode.com/posts', res => {
res.on('data', data => {
buff += data
})
res.on('end', () => {
resolve(JSON.parse(buff))
})
})
})
try {
const results = await get()
return results
} catch (e) {
console.log(e.message)
}
}
function outer() {
const results = inner()
}
outer()
我肯定有一个愚蠢的显而易见的答案,但我没有看到。也许有一种基于on.('end')
的基于Promise的方法可以消除这些内部功能?任何发现 best 解决方案的帮助都值得赞赏(是的,测试结束了,我只是出于我个人的意愿而这样做)。