异步/等待与SubtleCrypto结合使用

时间:2017-03-21 22:26:33

标签: javascript promise async-await redux

我注意到MDN上的以下example (last one)让我相信有一种方法可以将SubtleCrypto函数的结果赋给变量。但据我所知/已经研究过async / await,它只能在await函数中使用async ...

async function sha256(message) {
    const msgBuffer = new TextEncoder('utf-8').encode(message);                     // encode as UTF-8
    const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);            // hash the message
    const hashArray = Array.from(new Uint8Array(hashBuffer));                       // convert ArrayBuffer to Array
    const hashHex = hashArray.map(b => ('00' + b.toString(16)).slice(-2)).join(''); // convert bytes to hex string
    return hashHex;
}

sha256('abc').then(hash => console.log(hash));

const hash = await sha256('abc');

示例是不正确还是我误解了某些内容?最重要的是;是否可以将SubtleCrypto / Promise的结果分配给没有.then()的变量。

对于那些问自己为什么我需要/想要这个的人。我正在使用WebCrypto和redux-persist,但它似乎没有处理基于Promise的transforms

1 个答案:

答案 0 :(得分:2)

该示例具有误导性(或不完整),您无法在await之外使用async function。我刚刚编辑过它(MDN是一个维基!)。

  

是否可以将SubtleCrypto / Promise的结果分配给不带.then()的变量。

是的,它将promise对象存储在变量中。要访问promises结果,您需要使用thenawait