我正在尝试使用异步/等待功能来构建节点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
。
答案 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();
}