![](/img/trans.png)
[英]How can I write a Promise.all on a collection to quickly switch it from parallel to serial execution?
[英]How can I tell if my promise.all is running in parallel?
我有以下Promise.all
示例。 我想知道它是否在lambda.invoke
方面“並行” lambda.invoke
? 以及我如何測試某些東西是否正在並行運行?
引用了這個線程
function get1(id) {
return new Promise((resolve, reject) => {
const params = {
FunctionName: 'myLambda', // the lambda function we are going to invoke
InvocationType: 'RequestResponse',
Payload: { id },
};
lambda.invoke(params, (err, data) => {
if (err) {
reject(new Error('error'));
} else {
const result = JSON.parse(data.Payload);
resolve(result);
}
});
}).catch(e => Promise.resolve({ error: 'Error has occurred.' }));
}
exports.getDetails = list => Promise.all(list.map(get1))
.then((response) => {
return result;
}).catch((error) => {
console.log('oops ', error);
});
您可以算出已開始但尚未完成的操作數:
let running = 0;
// Inside of the promise:
running++;
lambda.invoke(params, (err, data) => {
running--;
console.log(`lambda.invoked finished, ${running} tasks still running`);
});
如果invoke
是同步的,則會得到:
lambda.invoked finished, 0 tasks still running
lambda.invoked finished, 0 tasks still running
lambda.invoked finished, 0 tasks still running
如果它是異步的,則會得到:
lambda.invoked finished, 2 tasks still running
lambda.invoked finished, 1 tasks still running
lambda.invoked finished, 0 tasks still running
一種測試方法是確定呼叫應花費多長時間以及Promise.all完成需要多長時間。 如果任務是串行執行的,並且每個調用大約需要1秒鍾,則包含5個元素的列表將需要大約5秒鍾才能完成。 但是,如果它們並行運行,則它們應花費約1秒的時間(盡管由於固有的開銷可能會稍高一些)。 基本上,您要檢查它是否完成與最長任務一樣快,或者是否在完成所有任務所花費的時間之后完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.