我想用称为 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),并确保它是同步的。但如果有一种方法可以减少需要维护的代码并且不需要许可证审查,我宁愿不这样做。
有一种方法可以做到这一点,并且它是特定于 njs 的。
这有时不仅是一个好主意,在这种情况下也是一个要求。
nginx 中的 js_set 总是传递一个“r”参数。
在 js_set 调用的异步函数结束时,您需要调用 r.setReturnValue(result)。 这会以 js_set 可以使用的方式返回“结果”。