Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的函数返回[AsyncFunction:repo]?_Javascript_Node.js_Async Await_Axios_Github Api - Fatal编程技术网

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

Javascript 为什么我的函数返回[AsyncFunction:repo]?,javascript,node.js,async-await,axios,github-api,Javascript,Node.js,Async Await,Axios,Github Api,我正在尝试使用async/await功能构建一个节点JS脚本。我目前有一个名为repo.js的文件作为帮助文件,用于从Github的API获取数据,并将其返回给变量,以便我在节点应用程序的不同js文件中的其他地方访问,repo.js如下所示: const axios=require('axios')) 常量repo=async()=>{ const data=等待axios.get('https://api.github.com/repos/OWNER/REPO/releases', { 标题:

我正在尝试使用async/await功能构建一个节点JS脚本。我目前有一个名为
repo.js
的文件作为帮助文件,用于从Github的API获取数据,并将其返回给变量,以便我在节点应用程序的不同js文件中的其他地方访问,
repo.js
如下所示:

const axios=require('axios'))
常量repo=async()=>{
const data=等待axios.get('https://api.github.com/repos/OWNER/REPO/releases', {
标题:{
“授权”:“令牌MYTOKEN”
}
})
返回数据
}
exports.repo=repo
然后在我的
main.js
文件中,我正在尝试执行

const repo=require('./src/utils/repo')
程序
.option('-d,--debug','输出额外调试')
.option('-s、-small、'small pizza size')
.option('-p,--pizza type',pizza味')
常量repoData=repo.repo
console.log(repoData)
不幸的是,这只是将
[AsyncFunction:repo]
返回到控制台,这不是预期的行为。为什么我不能访问这里的内容

更新

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

例如:

var版本=“”
repo.getRepoDetails()然后((res)=>{
version=res.data[0]。body.tag\u name
})

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

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

repo.repo().then(res => console.log(res))
如果您的应用程序是一个简单的nodejs脚本(或单个文件),那么您可以将代码封装在一个

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)
})()
const repo=require('./src/utils/repo')
(异步()=>{
程序
.option('-d,--debug','输出额外调试')
.option('-s、-small、'small pizza size')
.option('-p,--pizza type',pizza味')

const repoData=await repo.repo()异步函数始终返回promise对象,以便您可以使用promise.then()访问结果,如


您正在记录函数本身,而不是执行它:
const repoData=repo.repo()
此处的标题和问题似乎完全无关。@Reyno Sweet,问题是当我运行脚本时,控制台日志输出
Promise{}
这不是来自Github API的数据。由于数据仍处于挂起状态,我如何让它等待并输出到控制台?@RyanHolton您需要将代码放入并使用以获取数据。或者使用promise@RyanHolton如果您使用的是NodeJS,您可以升级到带有标志
--experimental的版本-顶级wait
。这将消除您对async/wait or then的需要。很好,但这意味着我必须将应用程序的所有代码都放在
中。then()
因为我只需要从API中获取一项,并将其存储在变量中,以便我在其他地方使用。请检查我的更新描述。如果我只从API中获取一项,我当然不必为了获取一项而将所有函数嵌套在另一个函数中?不幸的是,如果你想使用承诺的响应,你需要处理你想使用itImagine的每一个级别都是一个承诺,我需要从一个repo中获得Github API的版本,以便在我的JS中使用,这是否意味着我需要我的应用程序的所有代码都在
.then()
中,仅仅依靠这一点?当然这是类似这样的想法:
const version=wait myFunc()
例如。
repo.repo().then(result => result)