繁体   English   中英

嵌套承诺:基于数组创建 N 个承诺

[英]Nested Promises: Creating N promises based on array

我有 N 个工作区。 数字 N 是动态的。

每个工作区都必须执行一些预定义的查询。

我目前正在做的是遍历工作区数组( Synchronously )并使用Promise.all()asynchronous )执行所有查询。

目标:我需要的是异步运行所有工作区的所有查询。 所以我想摆脱通过每个工作区的循环。 理想的结果将是一个数组数组。 例如,如果有 3 个工作区和 2 个查询,结果将是[[q1, q2], [q1,q2], [q1,q2]]每个 q1 和 q2 是每个工作区的结果。

下面是示例代码:

async function fetchingWorkspaceLogs (workspaceId) {
  // Defining q1QueryString, q2QueryString so on...
  // for azure "loganalytics" reader.
  const [q1Result, q2Result, q3Result] = await Promise.all([
    logAnalyticsReader.query(
      q1QueryString,
      workspaceId
    ),
    logAnalyticsReader.query(
      q2QueryString,
      workspaceId
    ),
  ])
// return some promises
}

// Parse all workspaces for query
for (let j = 0; j < workspaceIdList.length; j++) {
  workspaceId = workspaceIdList[j]
  const queryResults = await fetchingWorkspaceLogs(workspaceId)
  q1QueryResults = queryResults[0]
  q2QueryResults = queryResults[1]
}

如何创建另一个承诺对象以使其异步?

随意询问您是否需要其他任何东西以获得更多清晰度。

如果我理解正确,您可以map()工作区数组map()Promises数组并用Promise.all包装它。

下面的代码是“伪”来说明这一点。

如果它不能反映您的情况,我可能需要更多信息。

 async function fetchingWorkspaceLogs (workspaceId) { const [q1Result, q2Result] = await Promise.all([ Promise.resolve(`param1: ${workspaceId}`), Promise.resolve(`param2: ${workspaceId}`), ]); // In this example, the function returns the result to make the point of returning Promise with the information return Promise.resolve([q1Result, q2Result]); } const workspaceIdList = ['workspace1', 'workspace2', 'workspace3']; (async () => { const result = await Promise.all( workspaceIdList.map(workspace => fetchingWorkspaceLogs(workspace)) ); console.log(result); })();

你需要使用 .map() 函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM