簡體   English   中英

我如何知道我的promise.all是否並行運行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM