需要帮助加快骡流。
现在我有 4 个疑问需要询问。前 3 个查询彼此不依赖,因此我想异步执行这 3 个查询。一旦他们全部 3 完成,我想将结果传递给 4the 查询。现在这些 api 请求需要 2-4 秒(通过邮递员),我希望这会加快速度。
查询很简单,而且是英文,
我遇到的问题是将 3 个查询放入一个异步块中。并等待他们完成后再进行第四次查询。
我尝试使用直到成功块,但这似乎不起作用。
现在我有以下代码
<! -- Goal here is to make the following 3 queries at the same time. -->
<async doc:name="Async" doc:id="4c25219e-d163-4fa2-b8cf-51e13eb020c5">
<salesforce:query doc:name="get support case record id" doc:id="4c5955f0-484f-4fc1-ad6b-981c367b825e" config-ref="qapartial" targetValue="#[payload[0].Id]" target="supportCaseRecordTypeId">
<salesforce:salesforce-query><![CDATA[SELECT Id FROM RecordType WHERE SObjectType = 'Case' AND DeveloperName = 'SUPPORT']]></salesforce:salesforce-query>
</salesforce:query>
<salesforce:query doc:name="get app support case record type Id" doc:id="c7490429-736e-4fb1-8ec1-c74c2e59e631" config-ref="qapartial" target="appSupportCaseRecordTypeId" targetValue="#[payload[0].Id]">
<salesforce:salesforce-query><![CDATA[SELECT Id FROM RecordType WHERE SObjectType = 'Case' AND DeveloperName = 'SUPPORT_TICKET_FROM_APP']]></salesforce:salesforce-query>
</salesforce:query>
<salesforce:query doc:name="get account Id from pin" doc:id="ccc565b8-88c8-45c5-9b9e-fc474d3da81f" config-ref="qapartial" target="accountId" targetValue="#[payload[0].Id]">
<salesforce:salesforce-query><![CDATA[SELECT Id, pin__c
FROM Account
WHERE pin__c = ':customerPin']]></salesforce:salesforce-query>
<salesforce:parameters><![CDATA[#[output application/java
---
{
customerPin : vars.pin
}]]]></salesforce:parameters>
</salesforce:query>
</async>
<! -- Goal here is to run this code AFTER the 3 queries finish. -->
<salesforce:query doc:name="get case records" doc:id="f0aed7fb-f47d-4392-b5b8-95993d0bba7e" config-ref="qapartial">
<salesforce:salesforce-query><![CDATA[SELECT Id FROM Case WHERE AccountId = ':accountId' AND
(
(RecordTypeId = ':appSupportCaseRecordId' AND Origin = 'App') OR
(RecordTypeId = ':supoprtCasesRecordId' AND
(Origin = 'Email' OR
Origin = 'Phone' OR
Origin = 'Web'))
)]]></salesforce:salesforce-query>
<salesforce:parameters><![CDATA[#[output application/java
---
{
accountId : vars.accountId,
supoprtCasesRecordId : vars.supportCaseRecordTypeId,
appSupportCaseRecordId : vars.appSupportCaseRecordTypeId
}]]]>
</salesforce:parameters>
</salesforce:query>
我怀疑异步的工作原理存在混乱。 文档说:
由于 Async 作用域以“即发即忘”的方式执行,因此该作用域内的处理结果在主流程中不可用。
这意味着你不能使用异步来取回结果。另请注意,异步范围内的 3 个查询是依次执行的。它不会并行化内部的步骤。
如果您想收到结果,您可以: