CNode

inquirer.js 怎么才能让答案变得全局共享

问答
Wwangi4myself发布于6 年前最后回复6 年前5 回复5051 浏览0 收藏

inquirer.js 执行的代码是一个回调 但是我想把回调的结果 通过module.exports 变得全局共享,谷歌了半天外加英文不算很好没有得到答案。inquirer.prompt(questions).then(answers=>{ module.exports = { answers } }) 本意就是只需要执行一次inquirer.js 但是得到的结果我可以在任何文件里通过require的结果得到。有没有哪位同学尝试过

查看回复

回复 (5)

A
atian25#1·6 年前

跟 inquirer 其实没啥关系。 全局共享的思路是不好的。

W
wangi4myself#2·6 年前
引用 atian25跟 inquirer 其实没啥关系。 全局共享的思路是不好的。

@atian25 但是假设我写了一个inquirer的脚本,那如果不能require 回调的结果就意味着我所有有关inquirer的东西都只能写在一个js文件里了。

W
wangi4myself#3·6 年前

自己顶一波

A
atian25#4·6 年前

你代码的组织问题,一般是需要一个 context 一路下去的,可以看下 egg-bin、common-bin 这几个库我们是怎么写的。

U
ugrg#5·6 年前

你可以exports一个promise,在使用的地方,用await或.then来调用,你这份数据毕竟是一个异步的数据,你是需要考虑数据有没有准备好的。

// module
module.exports = inquirer.prompt(questions);
// require
require("module").then(answers=>{});

如果你可以确定数据能提前准备好,只要想把这一个异步调用释放掉,你还可以这样写:

const response = {};
inquirer.prompt(questions).then(answers=>{
	response.answers=answers;
});
module.exports = response;

你要注意,上面的这段代码是有风险的,如果你在then回调之前访问了response,你得到的将会是个undefined

参与回复
登录后即可参与回复。登录