njs中有没有办法从同步函数调用异步函数?

问题描述 投票:0回答:1

我想用称为 njs 的 JavaScript 方言(它是 Nginx 的一部分)从同步函数调用异步函数。

我正在使用 njs'

js_set
来调用我正在编写的名为
get_obfuscated_token
的 JavaScript 函数,并且根据 文档
js_set
需要同步代码。
get_obfuscated_token
需要计算SHA-512哈希值,这似乎意味着:

result = await crypto.subtle.digest("SHA-512", msgUint8);

但看来我无法通过同步函数在

await
上进行
crypto.subtle.digest
。我回来了:
"http_authorization":"[object Promise]"

我怎样才能以一种让

crypto.subtle.digest
开心的方式给
js_set
打电话?

在最坏的情况下,我可以求助于纯 JavaScript SHA-512 函数(比如 https://github.com/emn178/js-sha512),并确保它是同步的。但如果有一种方法可以减少需要维护的代码并且不需要许可证审查,我宁愿不这样做。

javascript nginx njs
1个回答
0
投票

有一种方法可以做到这一点,并且它是特定于 njs 的。

这有时不仅是一个好主意,在这种情况下也是一个要求。

nginx 中的 js_set 总是传递一个“r”参数。

在 js_set 调用的异步函数结束时,您需要调用 r.setReturnValue(result)。 这会以 js_set 可以使用的方式返回“结果”。

© www.soinside.com 2019 - 2024. All rights reserved.