Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要在网页上显示异步函数结果的帮助吗_Javascript_Html_Api_Asynchronous_Async Await - Fatal编程技术网

Javascript 需要在网页上显示异步函数结果的帮助吗

Javascript 需要在网页上显示异步函数结果的帮助吗,javascript,html,api,asynchronous,async-await,Javascript,Html,Api,Asynchronous,Async Await,我正在尝试将Spotify PKCE授权与Siri快捷方式一起使用。不幸的是,我找到的所有解决方案都不适用于我的具体情况。我有这段代码 我真的不知道我在做什么。基本上,我需要一个字符串的SHA256散列,但这需要字节和十六进制。然后需要对其进行base64Url编码。我已经尝试了堆栈上的大多数解决方案,但我似乎无法将最终产品输出到网页上,这是我能够在iPhone上本机运行Java脚本的主要方式。任何帮助都将不胜感激 <script> function sha256(plai

我正在尝试将Spotify PKCE授权与Siri快捷方式一起使用。不幸的是,我找到的所有解决方案都不适用于我的具体情况。我有这段代码 我真的不知道我在做什么。基本上,我需要一个字符串的SHA256散列,但这需要字节和十六进制。然后需要对其进行base64Url编码。我已经尝试了堆栈上的大多数解决方案,但我似乎无法将最终产品输出到网页上,这是我能够在iPhone上本机运行Java脚本的主要方式。任何帮助都将不胜感激

<script>

    function sha256(plain) { 
        // returns promise ArrayBuffer
        const encoder = new TextEncoder();
        const data = encoder.encode(plain);
        return window.crypto.subtle.digest('SHA-256', data);
    }

    function base64urlencode(a) {
        // Convert the ArrayBuffer to string using Uint8 array.
        // btoa takes chars from 0-255 and base64 encodes.
        // Then convert the base64 encoded to base64url encoded.
        // (replace + with -, replace / with _, trim trailing =)
        return btoa(String.fromCharCode.apply(null, new Uint8Array(a)))
            .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
    }

    async function pkce_challenge_from_verifier(v) {
        hashed = await sha256(v);
        base64encoded = base64urlencode(hashed);
        return base64encoded;
    }

const code = await pkce_challenge_from_verifier("Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN")

document.getElementById("value").innerHTML =  code;

</script>
<body>

<p id="value"></p>
</body>
</html> ```

函数sha256(普通){
//返回承诺ArrayBuffer
const encoder=新的textcoder();
常量数据=编码器。编码(普通);
返回窗口.加密.隐蔽.摘要('SHA-256',数据);
}
函数base64urlencode(a){
//使用Uint8数组将ArrayBuffer转换为字符串。
//btoa接受0-255之间的字符,base64编码。
//然后将base64编码转换为base64url编码。
//(替换+为-,替换/替换为u,纵倾=)
返回btoa(String.fromCharCode.apply(null,新Uint8Array(a)))
.replace(//\+/g,'-')。replace(//\//g,'.''.')。replace(//=+$/,'');
}
来自校验器的异步函数pkce\u质询(v){
哈希=等待sha256(v);
base64encoded=base64urlencode(散列);
返回base64编码;
}
const code=等待来自验证者的pkce挑战(“Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN”)
document.getElementById(“value”).innerHTML=code;

```
await
不允许在全局级别使用,即只能在
async
函数中使用
await
。 那么如何解决呢?使用承诺而不是等待。像这样

来自验证者的pkce质询(“Zg6klgrnixQJ629GsawRMV8MjWvwRAr-vyvP1MHnB6X8WKZN”) .then((代码)=>document.getElementById(“值”).innerHTML=code) .catch((错误)=>console.error(错误))
同时放置
body
结束标记之后,否则JS找不到
p
元素。

JS看起来不错。试着把js脚本放在你的标记之后的正文的末尾。谢谢你,这工作做得很好