为什么我的函数返回[AsyncFunction:repo]?

时间:2020-09-17 13:47:32

标签: javascript node.js async-await axios github-api

我正在尝试使用异步/等待功能来构建节点JS脚本。目前,我有一个名为repo.js的文件作为辅助文件,可以从Github的API获取数据并将其返回给变量,以供我在节点应用程序的不同JS文件中的其他位置进行访问,repo.js就这样:

const axios = require('axios')

const repo = async () => {
  const data = await axios.get('https://api.github.com/repos/OWNER/REPO/releases', {
    headers: {
      'Authorization': 'token MYTOKEN'
    }
  })
  return data
}

exports.repo = repo

然后在我的main.js文件中尝试执行...

const repo = require('./src/utils/repo')

program
  .option('-d, --debug', 'output extra debugging')
  .option('-s, --small', 'small pizza size')
  .option('-p, --pizza-type <type>', 'flavour of pizza')

const repoData = repo.repo
console.log(repoData)

不幸的是,这只是将[AsyncFunction: repo]返回到控制台,这不是预期的行为。为什么我不能在这里访问内容?

更新

根据我得到的一些答复,我知道我需要在异步函数内部使用代码或使用.then()。问题是,我不想将我所有的应用程序代码都放在.then()内,而只是依靠API中的一件事。

示例:

var version = ''
repo.getRepoDetails().then((res) => {
  version = res.data[0].body.tag_name
})

现在我可以在任何地方访问version

2 个答案:

答案 0 :(得分:0)

每个异步/等待功能都是一个承诺,这意味着您需要等待它完成才能读取其结果。

repo.repo().then(res => console.log(res))

如果您的应用程序是简单的nodejs脚本(或单个文件),则可以将代码包装在IIFE中,如下所示:

const repo = require('./src/utils/repo')

(async () => {
  program
    .option('-d, --debug', 'output extra debugging')
    .option('-s, --small', 'small pizza size')
    .option('-p, --pizza-type <type>', 'flavour of pizza')

  const repoData = await repo.repo() <--- You can use await now instead of then()
  console.log(repoData)
})()

答案 1 :(得分:-1)

异步函数总是返回promise对象,因此您可以使用promise.then()之类的方法访问结果

public static function customSessionStore($name, $value)
{
    // if (session_id() == '') {
    //     session_id('session1');
    // }
    session_create_id($name);
    session_start();
    $_SESSION[$name] = $value;
    session_write_close();
}