Nodejsasynchronous问题,同时解密aws kms键

在node6中有一个lambda函数,它有5个envvariables,全部用aws kmsencryption。 我有以下方法,它采用encryption密钥并返回解密密钥。

function decryptKMS(encryptedKey) { console.log('inside decryptkms'); const kms = new AWS.KMS(); kms.decrypt({ CiphertextBlob: new Buffer(encryptedKey, 'base64') }, (err, data) => { if (err) { console.log('Decrypt error:', err); return callback(err); } var result = data.Plaintext.toString('ascii'); return result; }); } 

在我的处理程序中,我正在执行此操作以获取解密的密钥。

 decryptedkey1 = decryptKMS(encryptedkey1); decryptedkey2 = decryptKMS(encryptedkey2); decryptedkey3 = decryptKMS(encryptedkey3); decryptedkey4 = decryptKMS(encryptedkey4); decryptedkey5 = decryptKMS(encryptedkey5); 

但是,由于节点是asynchronous的,所以在解密密钥之前,该function移动到下一步。 有无论如何我可以使用节点承诺所有的密钥组合,或者有什么办法从kms一次解密多个密钥?

Promiseify你的Promise.all并结合Promise.all

 function decryptKMS(key) { return new Promise((resolve, reject) => { const kms = new AWS.KMS() kms.decrypt({}, (err, data) => { if(err) { reject(err) } else { resolve(data.Plaintext.toString('ascii')) } }) }) } const keys = [encryptedkey1, encryptedkey2, encryptedkey3] Promise.all(keys.map(decryptKMS)) .then(([decryptedkey1, decryptedkey2, decryptedkey3]) => { // use decryptedkeyN here }) .catch(console.log)