我需要对API进行一些连续调用,直到请求限制完成。在每个请求之后,某些内容会保存到数据库中,下一个请求取决于从第一个请求中检索到的值,因此在上一个请求完成之前,每个请求都无法启动。
常见的while循环不起作用,因为它将以并行方式运行所有promise。并且在彼此之后连接的承诺仅适用于固定数量的请求。
那么,如何在循环中实现承诺?
基本上我想要的是:
<PropertyGroup>
...
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.0</ApplicationVersion>
...
<CustomBuildDependsOn>
Build;<!--First build to get the version-->
CustomPublish;<!--Rebuild and publish with the correct version-->
</CustomBuildDependsOn>
</PropertyGroup>
<Target Name="CustomBuild" DependsOnTargets="$(CustomBuildDependsOn)" />
<Target Name="CustomPublish">
<GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
<Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
</GetAssemblyIdentity>
<PropertyGroup>
<PublishDir>$(OutDir)\publish\$(TargetName)\</PublishDir>
<ApplicationVersion>%(CurrentAssembly.Version)</ApplicationVersion>
</PropertyGroup>
<Message Text="CustomPublish PublishDir = $(PublishDir)" />
<Message Text="CustomPublish ApplicationVersion = $(ApplicationVersion)" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean;Publish" Properties="PublishDir=$(PublishDir);ApplicationVersion=$(ApplicationVersion);">
</MSBuild>
答案 0 :(得分:3)
我在想(伪代码):
function makeAsyncCall(data) {
if (data) {
// save to db
}
$.ajax({
url: '/url',
success: function(data) {
makeAsyncCall(data);
}
})
}
然后你需要有一个标志来决定何时停止调用该函数。