2017-03-21 19 views
0

私は、SubtleCrypto関数の結果を変数に代入する方法があると私に信じさせるMDNの次のようなものがあると気づきました:example (last one)しかし、これまで、私は/が非同期について研究している知っているように/SubtleCryptoと組み合わせて非同期/待機しています

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'); 

例が正しくないです... async関数内awaitを使用するだけで可能です待つか、私が何かを誤解したのですか?最も重要な; .then()のない変数にSubtleCrypto/Promiseの結果を割り当てることが可能です。

なぜ私はこの地獄が必要なのか望んでいるのか、自分自身に尋ねる人々のために。私はredux-persistと組み合わせてWebCryptoを使いこなしていますが、Promiseベースのtransformsは処理していないようです。

答えて

2

例が誤解を招く(または不完全である)場合、awaitは実際にはasync functionの外側には使用できません。私はちょうどそれを編集しました(MDNはwikiです!)。

.then()のない変数にSubtleCrypto/Promiseの結果を割り当てることは可能ですか?

はい、promiseオブジェクトを変数に格納します。約束結果にアクセスするには、thenまたはawaitを使用する必要があります。

+0

申し訳ありませんが、私は狂っていたと思っていました...説明をありがとう。私は、それでは還元的なものに潜り込まなければならないように見えます。 –

関連する問題