我是NodeJS的新手。
我想调用kms.decrypt三次(嵌套),以便在调用processEvents函数之前,变量填充它们的值。
你能否建议如何正确编写承诺=如何平行调用它们以便在控制进入processEvents之前填充所有值?
exports.handler = function (event, context, callback) {
kms.decrypt({ CiphertextBlob: new Buffer(pwd_e, 'base64') }).promise().then(function(data) {
pwd_d = data.Plaintext.toString('ascii');
kms.decrypt({ CiphertextBlob: new Buffer(acl_e, 'base64') }).promise().then(function(data) {
acl_d = data.Plaintext.toString('ascii');
kms.decrypt({ CiphertextBlob: new Buffer(usr_e, 'base64') }).promise().then(function(data) {
usr_d = data.Plaintext.toString('ascii');
processEvent(event, context, callback);
});
});
}).catch(function(err) {
console.log(err);
context.done(err);
});
console.log(acl_d, usr_d, pwd_d);
};
答案 0 :(得分:0)
您正在寻找Promise.all。如果您使用Promise.all,那么您的代码将会是什么样子:
Promise.all([
kms.decrypt({ CiphertextBlob: new Buffer(pwd_e, 'base64') }).promise(),
kms.decrypt({ CiphertextBlob: new Buffer(acl_e, 'base64') }).promise(),
kms.decrypt({ CiphertextBlob: new Buffer(usr_e, 'base64') }).promise()
]).then(results => {
const plainTexts = results.map(result => result.Plaintext.toString('ascii'));
// plainTexts[0] === pwd_d in your code
// plainTexts[1] === acl_d in your code
// plainTexts[2] === usr_d in your code
const [pwd_d, acl_d, usr_d] = plainTexts;
processEvent(event, context, callback);
}).catch(err => {
console.log(err);
context.done(err);
});