Js, "ana"ya devam etmek için çözülene kadar bekleyeceğine söz veriyor.

0

Soru

JavaScript'te kullanmadan önce bekleyen bir sözü çözmek için bir işlevi nasıl zorlayabilirim

  generateKey(pass, iter).then(function(result) {
    Pkey = result;
  });

yukarıdaki Pkey döndürür <empty string> çözmeden önce boşluksuzluğu kontrol etmek için bir döngü yazabilirim ama bu mantıksız görünüyor, değil mi?

ve

  Pkey = generateKey(pass, iter);

sonunda yerine getirilen bekleyen bir sözü döndürür

function generateKey(passwd, iterations) {

  var encoder = new TextEncoder('utf-8');
  var passphraseKey = encoder.encode(passwd);
  var saltBuffer = encoder.encode("carthage");

  return crypto.subtle.importKey(
    'raw',
    passphraseKey,
    {name: 'PBKDF2'},
    false,
    ['deriveBits', 'deriveKey']
  ).then(function(key) {
//    console.log(key);
    return window.crypto.subtle.deriveKey(
    { "name": 'PBKDF2',
      "salt": saltBuffer,
      "iterations": iterations,
      "hash": 'SHA-256'
    },
    key,
    { "name": 'AES-CBC',
      "length": 256
    },
    true,
    [ "encrypt", "decrypt" ]
  )
  }).then(function (webKey) {
//    console.log(webKey);
    return crypto.subtle.exportKey("raw", webKey);
  }).then(function (buffer) {
//    console.log(buffer);
//    console.log(saltBuffer);
//    console.log("Private Key = " + buf2hex(buffer));
//    console.log("Salt = " + bytesToHexString(saltBuffer));
    return buffer;
  });

}



function buf2hex(buffer) { // buffer is an ArrayBuffer
  return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');
}



function bytesToHexString(byteArray) {
  return Array.prototype.map.call(byteArray, function(byte) {
    return ('0' + (byte & 0xFF).toString(16)).slice(-2);
  }).join('');
}

asynchronous javascript promise
2021-11-23 04:58:14
1

En iyi cevabı

1

Async & await'i aşağıdaki gibi kullanabilirsiniz

async function generateKey(passwd, iterations) {...}
...
Pkey = await generateKey(pass, iter);
2021-11-23 05:13:48

Ancak, bu işlevin yine de bir söz döndüreceğini ve bu işlevin arayanının yine de kullanması gerektiğini unutmayın .then() veya await çözümlenen değeri sözden almak için bu işlev döndürülür.
jfriend00

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................