承诺while循环,怎么样?

时间:2016-09-05 14:36:19

标签: javascript while-loop promise

我需要对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>

1 个答案:

答案 0 :(得分:3)

我在想(伪代码):

function makeAsyncCall(data) {
    if (data) {
        // save to db
    }
    $.ajax({
        url: '/url',
        success: function(data) {
           makeAsyncCall(data);
        }
    })
}

然后你需要有一个标志来决定何时停止调用该函数。