从异步函数返回值

时间:2016-05-06 07:03:22

标签: javascript async-await es6-promise

如何从异步函数返回值?

我有以下承诺:

function reqGitActivity (url) {
  const options = {
    url: url,
    headers: {
      'User-Agent': 'request'
    }
  }

  return new Promise((resolve, reject) => {
    request(options, (err, res, body) => {
      if (err) {
        reject(err)
        return
      }
      resolve(body)
    })
  })
}

然后我将此Promise与Async / Await

一起使用
async function githubActivity () {
    const gh = await reqGitActivity(`https://api.github.com/users/${github}/events`)
    return gh
}

如果我用:

执行该功能
console.log(JSON.parse(githubActivity()))

我只获得Promise而不是请求返回的值。

Promise {
     _c: [],
     _a: undefined,
     _s: 0,
     _d: false,
     _v: undefined,
     _h: 0,
     _n: false }

但是如果我在gh上放置了console.log,我从请求中获得了值,但我不希望githubActivity()记录我想要返回值的值。

我也试过了:

async function githubActivity () {
    return await reqGitActivity(`https://api.github.com/users/${github}/events`)
    .then(function (res) {
      return res
    })
}

但我仍然只得到承诺,而不是决心的价值。

有什么想法?

1 个答案:

答案 0 :(得分:3)

看起来你只能access that value inside of a callback

因此,请使用:

,而不是console.log(JSON.parse(githubActivity()))
githubActivity().then( body => console.log( JSON.parse( body ) ) )