Js สัญญากับรอจนกว่าจะคลี่คลายเพื่อทำต่อไป"หลัก"

0

คำถาม

ยังไงฉันสามารถบังคับให้ฟังก์ชันที่จะต้องแก้ไขเป็นกาสัญญาก่อนการใช้มันอยู่ในจาวาสคริปต์

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

อยู่เหนือ Pkey จะได้ค่า <empty string> ก่อนที่การแก้ไขฉันจะเขียนเรื่องให้ตรวจสอบไม่ใช่ความว่างเปล่าแต่มันดูเหมือนขัดกับความรู้สึไม่?

แล้ว

  Pkey = generateKey(pass, iter);

จะได้ค่าเป็นค้างคาสัญญาว่านั่นคือในที่สุดก็ถูกเติมเต็ม

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

คำตอบที่ดีที่สุด

1

คุณสามารถใช้ async & รอคำสั่ง ที่ด้านล่างนี้

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

แต่เก็บไว้ในใจนั่นฟังก์ชันนี้จะยังคงกลับมาเป็นสัญญาและคนโทรบอกของฟังก์ชันนี้จะยังคงต้องใช้ .then() หรือ await จะไปเอาแก้ไขค่าจากสัญญากับฟังก์ชันนี้จะกลับมา
jfriend00

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่