【发布时间】:2022-01-04 09:03:41
【问题描述】:
在函数链中使用多个 async() 会破坏我的函数。
有没有办法可以将Key2pkcs8() 包含在generateKey() 中?
async function generateKey() {
let getKeyPair = await crypto.subtle.generateKey(
{
name: "ECDH",
namedCurve: "P-384"
},
false,
["deriveKey"]
);
let PriKey = async() => {
let PriKey = await getKeyPair.privateKey;
console.log("pri = " + PriKey);
return PriKey;
};
let PubKey = async() => {
let PubKey = await getKeyPair.publicKey;
console.log("pub = " + PubKey);
};
let Key2pkcs8 = async(PriKey, PubKey) => {
let Key2pkcs8Pub = await crypto.subtle.exportKey("pkcs8", PubKey);
let Key2pkcs8Pri = await crypto.subtle.exportKey("pkcs8", PriKey);
return pkcs8keyarray = [Key2pkcs8Pub, Key2pkcs8Pri];
return Keyarray = [PriKey(), PubKey()]; // i want to put <return pkcs8keyarray()> here
};
generateKey().then(Key2pkcs8 => console.log(Key2pkcs8[0], Key2pkcs8[1])); 按预期工作并返回 pri = [object CryptoKey] Promise { <state>: "fulfilled", <value>: undefined } Promise { <state>: "fulfilled", <value>: CryptoKey }
但是当使用 return pkcs8keyarray() 而不是 return Keyarray = [PriKey(), PubKey()]; 时,它会中断并返回 undefined
我原本打算让key2pkcs2 将密钥作为变量(公钥或私钥),然后在最后的数组中返回两者,类似于示例
【问题讨论】:
-
PriKey和PubKey没有明确的return,因此它们只会产生解析为undefined的承诺。另外,既然这是一个承诺,你应该await-ing 结果(或使用.then())
标签: javascript asynchronous promise ecmascript-2017