Mar*_*lov 0 javascript asynchronous amazon-web-services node.js amazon-dynamodb
我正在使用包含四个异步函数的这段代码。我需要他们严格执行。
我该如何执行它们将按照示例中给出的顺序执行?
我的用例在Lambda中,并且可以访问异步。
function scanProducts() {
dynamoClient.scan(productParams, function (err, data) {
});
}
function scanCoupons() {
dynamoClient.scan(couponsParams, function (err, data) {
});
}
function scanRetailers() {
dynamoClient.scan(retailerParams, function (err, data) {
});
}
function sendEmail(ses) {
var email = {
"Source": "test@gmail.com",
"Template": "test-template",
"Destination": {
"ToAddresses": ["test@gmail.com"]
},
"TemplateData": `{}`
}
ses.sendTemplatedEmail(email);
}
Run Code Online (Sandbox Code Playgroud)
我会将其转换dynamoClient.scan为基于Promise的函数,然后对其进行await每次调用,例如:
const dynamoClientScanProm = (params) => new Promise((resolve, reject) => {
dynamoClient.scan(params, function (err, data) {
if (err) reject(err);
else resolve(data);
});
});
// ...
// in an async function:
try {
await dynamoClientScanProm(productParams);
await dynamoClientScanProm(couponsParams);
await dynamoClientScanProm(retailerParams);
// promisify/await this too, if it's asynchronous
ses.sendTemplatedEmail(email);
} catch(e) {
// handle errors
}
Run Code Online (Sandbox Code Playgroud)
尚不清楚您是否需要使用调用结果,但是如果您确实需要结果并且不只需要等待Promise解析,则在awaiting 时将其分配给变量,例如
const productResults = await dynamoClientScanProm(productParams);
Run Code Online (Sandbox Code Playgroud)
也就是说,如果的其他调用未使用结果dynamoClientScanProm,则并行(使用Promise.all)而不是串行运行所有调用会更有意义,这样可以更快地完成整个过程。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |