- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找到我的问题的解决方案,但找不到,并且正在寻找一些“最佳实践示例”。我有一个 nodejs express 应用程序,我的函数在文件中拆分。例如我有这个 Controller (oktacontroller.js):
var okta_api_key = <here some await data, getting from db>;
const OKTA_ORG_URL = '<here too>';
exports.createUser = async (req, res) => {
console.log(okta_api_key);
}
exports.getGroups = async (req, res) => {
console.log(okta_api_key);
}
在两个导出函数(它们是快速路由)中,我需要 var okta_api_key。我知道我可以通过在两个函数中查询它们来获取它们,因为它们是异步函数,我可以在那里使用 await,但每次都查询它感觉很愚蠢(因为它永远不会改变)。
我该如何管理它?我知道我可以做到这一点:
var okta_api_key;
(async () => {
okta_api_key = await <getting key async>
})()
但这也让人感觉不对..
有没有办法制作某种大型函数,它是异步的,并导出这两个函数?换句话说:如何在文件(模块)的顶层使用 await。它不需要在顶层(这是不可能的),但可以通过某种方法将我的“顶层”变量暴露给导出的函数。
编辑:其他一些用例,因为我得到了将其放入配置文件的建议。是的,对于这个是可能的,但是例如:我有一些其他的 api key ,它在每次启动时从服务本身获取他的访问 token (因为它过期)。该 token 无法存储在配置文件中,因此我需要一些异步工作来获取该值。我知道 top-level-await 不起作用(甚至不可取),但我只想举一个例子,说明如果这是您的项目,你们会如何做到这一点 :)
最佳答案
你很接近:
var okta_api_key = (async () => {
return await <getting key async>
})();
创建一个 promise ,然后在您想要使用它时等待
该 promise 。
How do I use await on the top level of a file (module).
顶层 await
可能看起来很棒:您只需添加一个 await
然后就可以同步访问变量。但这过于简化了事情:它将停止所有依赖于该模块的模块的执行。在大多数情况下,您不希望这样¹。而是创建异步任务的 promise ,然后在需要时等待它。这样您就可以将异步执行限制为实际需要它的代码片段。
¹ 那些罕见的情况是:
1) 加载一些全局配置,您必须在代码中的任何地方访问这些配置,因此如果配置未准备就绪,启动服务是没有意义的。
2) await
在你的服务的顶层文件中:因为没有模块依赖它,这不会导致任何问题。
旁注:顶级 await 尚未指定,NodeJS 支持也尚不存在。要在生产中使用它,您必须等待几个月(?)。
关于Javascript/Nodejs 在 nodejs 模块的顶层使用 await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56380592/
我正在开发一个需要多个窗口的程序,第一个出现的是登录窗口,我使用了 Toplevel 小部件以使其他窗口成为其子窗口,但这段代码一直显示两个窗口而不是一个。 from Tkinter import F
我不知道一般如何实现这一点,但为了清楚起见,我会特别询问一个实例: Sexplib 对我来说看起来很有趣。我想玩弄它。我已经下载了它,安装得很好(反正我很确定)等等。我想在顶层使用“with sexp
我在 makefile 中设置一个变量,如下所示: SOMEVAR = foo 此 makefile 稍后包含一些其他 makefile,在其中进行实际的程序构建: include generic/M
from tkinter import* import tkinter as tk def topLevel(): top=Toplevel() top.title("Listbox
我想查看乘法函数 (*) 的类型,因此我将其输入 OCaml 顶层。 # (*) 然而,顶层回应: (*);; 1: this is the start of a comment. 然后消耗我输入的任
我喜欢Try Ocaml的顶层行为:;; 在我按下 Enter 时隐式添加,并且我能够使用 Shift-Enter 进行多行编辑。 是否有可能在标准顶层或 utop 中获得相同的功能? 最佳答案 目前
我想知道,在 Ocaml 中,是否有部分输入信息。对于无法编译的程序,可以通过顶层/编译器的某些现有功能来绘制吗?让我解释。 在 Ocaml 中,众所周知,可以通过 -annot 文件检索推断类型。但
当我将分层 SVG 文件加载到 Illustrator 中时,所有图层都按其应有的方式工作,但它们始终位于新图层下;我没有指定“第 1 层”。 如何创建一个 SVG,使我的顶层最终也成为 Illust
我遇到了让我的 TreeView 填充已创建的顶层窗口的挑战,已尝试 fill=“x”和 fill=“both”,但没有得到结果。有任何建议这样做。 from tkinter import ttk i
标签在 div 中
我有以下布局: target target not target 我的问题是,如何定位所有顶级 标签(参见 target )使用 .fin
大家好,我有一个 div.mapFullscreenContainer #mapFullscreenContainer { position:fixed; top:0; lef
我有一个以编程方式创建的标签栏 Controller ,名为 TPastJourneyTabbar。当我单击 TableView 并调用 didSelectRowAtIndexPath: 时,我的选项
我是一名优秀的程序员,十分优秀!