如何从外部函数返回内部异步函数的结果?

时间:2019-04-09 18:14:01

标签: javascript node.js get async-await es6-promise

我只需要做一个涉及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 解决方案的帮助都值得赞赏(是的,测试结束了,我只是出于我个人的意愿而这样做)。

0 个答案:

没有答案