Js promesse d'attendre jusqu'à ce que résolu à continuer "principal"

0

La question

Comment puis-je la force d'une fonction pour résoudre une attente de la promesse avant de l'utiliser en JavaScript

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

au-dessus de Pkey retourne <empty string> avant de résoudre je pourrais écrire une boucle pour vérifier la non-vacuité, mais qui semble paradoxal, non?

et

  Pkey = generateKey(pass, iter);

renvoie une attente de la promesse qui est finalement rempli

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

La meilleure réponse

1

Vous pouvez utiliser async & vous attendent ci-dessous

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

Mais, gardez à l'esprit que cette fonction retournera TOUJOURS une promesse et l'appelant de cette fonction devra encore utiliser .then() ou await pour obtenir la valeur résolue par la promesse de cette fonction renvoie.
jfriend00

Dans d'autres langues

Cette page est dans d'autres langues

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