我想將 base64 散列到 base16 并將結果放入 kvp 陣列中。這是我的代碼(這里使用的 base64 是假設的,它是為了向您展示問題):
async function hashData() {
let base64 = 'sertyuiopnbv58426931';
let hash = await window.crypto.subtle.digest('SHA-256', _base64ToArrayBuffer(base64));
const hashArray = Array.from(new Uint8Array(hash));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
console.log(hashHex);
return hashHex;
}
function _base64ToArrayBuffer(mybase64) {
let binary_string = window.atob(mybase64);
let len = binary_string.length;
let bytes = new Uint8Array(len);
for (let i = 0; i < len; i ) {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}
function GetClubData () {
let kvp = {};
kvp['picture'] = hashData();
let kvp2 = {};
kvp2['Club'] = kvp;
var json = JSON.stringify(kvp2,null," ");
console.log(json);
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title> Test </title>
<link rel="stylesheet" href="test1.css"/>
</head>
<body>
<button onclick="GetClubData()" > Get Club Data </button>
<script src="../mylibrary/js/updateClub.js"></script>
</body>
在我的控制臺中沒有“圖片”結果。任何的想法 ?
uj5u.com熱心網友回復:
您的 hashData 函式是一個異步函式,如果您想像這樣訪問回傳值,則必須撰寫 awite
function GetClubData () {
putInArray();
}
async function putInArray() {
let kvp = {};
kvp['picture'] = await hashData();
let kvp2 = {};
kvp2['Club'] = kvp;
var json = JSON.stringify(kvp2,null," ");
console.log(json)
}
uj5u.com熱心網友回復:
hashData是一個異步函式,您需要等待。您的“kvp”中的值是一個 Promise,默認情況下無法進行 JSON 序列化。
uj5u.com熱心網友回復:
如果我理解正確,那么您正在嘗試hashData在普通函式中使用異步函式的結果GetClubData。你不可以做這個。要修復它,請使函式GetClubData異步并等待異步函式的結果hashData。這是正確的代碼,
async function GetClubData () {
let kvp = {};
kvp['picture'] = await hashData();
let kvp2 = {};
kvp2['Club'] = kvp;
var json = JSON.stringify(kvp2,null," ");
console.log(json);
}
運行該函式GetClubData產生結果,

此外,通過onclick屬性呼叫函式,
onclick="GetClubData()"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370021.html
標籤:javascript
