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