在使用Javascript进行操作之前,如何等待整个递归完成?

詹尼·莎玛(JANVI SHARMA)

我是reactJS的新手,正在尝试构建排序可视化器。我面临的问题是在实现quickSort()例程时。
我的quickSort()例程如下:

async quickSort(array, p, r) {
         if(p<r){
                this.Partition(array,p,r).then((q)=>{
                console.log(p, ' ', r)
                this.quickSort(array, p, q-1)
                this.quickSort(array,q+1,r)

                })  
            }   
    }

我使用分区功能使用.then的原因是因为我在动画的分区例程中使用了async / await。然后,分区例程返回分区“ q”的值,然后可以进行递归。分区函数返回一个promise,其值是分区值“ q”,如果没有该值,递归将无法进行,因此“ .then”部分将继续进行。

现在,代码可以正确运行,但是我想添加更多功能。我正在从quickSortHelper()例程内部调用此quickSort()例程。在quickSortHelper()中,我首先禁用按钮,然后调用quickSort(),在quickSort()完成后,我要再次启用该按钮。但是问题在于,只有在第一次调用quickSort(array,0,n-1)之后,它才会返回,因此该按钮将立即被禁用和启用,而无需等待整个递归的展开。

我尝试从quickSort()内部返回一个Promise,以确保只有当Promise被解决时,我们才继续启用按钮。但是promise在1-2次迭代后就解决了(这很有意义,因为我认为函数将返回p> r),因此无需等待整个递归完成就可以启用按钮。

对于如何解决这个问题,有任何的建议吗?有没有一种方法可以暂停执行,直到quickSort()完成,然后继续进行启用按钮的工作?

async quickSortHelper(){
        this.setState({generateButton: true})
        console.log(this.state.generateButton)

        var array = this.state.array

        this.quickSort(array, 0, array.length-1 ).then(()=>{
            this.setState({array})
            this.setState({generateButton: false})
        })
    }

还有一件事,console.log(this.state.generateButton)输出false。因此,它永远不会将状态设置为true吗?我不明白为什么会这样?

亭子

您的quickSort函数当前返回的Promise会立即以undefined的值进行解析。您需要返回一个承诺await及其解决方案。因此,要么继续执行then链(然后您就不需要了async),要么使用async/ await(请参阅下一节):

function quickSort(array, p, r) {
    if (p < r) {
        return this.Partition(array,p,r).then((q) => {
    //  ^^^^^^
            console.log(p, ' ', r);
            return this.quickSort(array, p, q-1);
    //      ^^^^^^
        }).then(() => {
            return this.quickSort(array,q+1,r);
    //      ^^^^^^
        });
    }   
}

当然,混合asyncthen有点奇怪,因此您还应该then用以下await语法替换它

async quickSort(array, p, r) {
    if (p < r) {
        let q = await this.Partition(array,p,r);
        console.log(p, ' ', r);
        await this.quickSort(array, p, q-1);
        await this.quickSort(array,q+1,r);
    }   
}

注意:使用分号。依靠自动分号插入可以在您可以自己控制时放弃控制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在继续进行之前,如何等待方法完全完成?

来自分类Dev

如何等待使用Java 7的文件API操作完成?

来自分类Dev

在React Redux中重定向之前,如何等待操作完成?

来自分类Dev

在执行下一个操作之前,如何等待请求完成(Xcode 11)

来自分类Dev

如何等待http请求完成?Javascript

来自分类Dev

在继续进行操作之前,我如何等待google远程通话返回我的结果

来自分类Dev

在使用jquery启动新事件之前,如何等待一组事件完成?

来自分类Dev

在使用检索到的数据之前,如何等待异步回调完成?

来自分类常见问题

在返回函数变量之前,如何等待诺言完成?

来自分类Dev

在继续之前如何等待cpp fstream完成写入?

来自分类Dev

在返回值之前,如何等待回调完成?

来自分类Dev

Gradle任务:如何等待文件操作完成

来自分类Dev

在Ember Model中进行进一步处理之前,如何等待find方法完成

来自分类Dev

如何等待功能完成?

来自分类Dev

如何等待诺言完成

来自分类Dev

如何等待功能完成?

来自分类Dev

如何等待任务完成

来自分类Dev

Javascript异步如何等待不同数量的uploadTasks全部完成?

来自分类Dev

Python如何等待使用列表完成阅读?

来自分类Dev

如何等待Javascript forEach循环完成后再继续进行下一个Sep

来自分类Dev

在完成Rxjs Observable之前,如何等待内部定义的异步方法?

来自分类Dev

在程序继续在Java中运行之前,如何等待事件完成

来自分类Dev

在调用build方法之前,如何等待asynch方法完成以加载数据?

来自分类Dev

从C#中的方法返回之前如何等待所有任务完成

来自分类Dev

如何等待并行Linq动作完成

来自分类Dev

AngularJS:如何等待$ resource完成?

来自分类Dev

如何等待document.write完成

来自分类Dev

我如何等待外部过程完成?

来自分类Dev

如何等待所有NSOperations完成?

Related 相关文章

  1. 1

    在继续进行之前,如何等待方法完全完成?

  2. 2

    如何等待使用Java 7的文件API操作完成?

  3. 3

    在React Redux中重定向之前,如何等待操作完成?

  4. 4

    在执行下一个操作之前,如何等待请求完成(Xcode 11)

  5. 5

    如何等待http请求完成?Javascript

  6. 6

    在继续进行操作之前,我如何等待google远程通话返回我的结果

  7. 7

    在使用jquery启动新事件之前,如何等待一组事件完成?

  8. 8

    在使用检索到的数据之前,如何等待异步回调完成?

  9. 9

    在返回函数变量之前,如何等待诺言完成?

  10. 10

    在继续之前如何等待cpp fstream完成写入?

  11. 11

    在返回值之前,如何等待回调完成?

  12. 12

    Gradle任务:如何等待文件操作完成

  13. 13

    在Ember Model中进行进一步处理之前,如何等待find方法完成

  14. 14

    如何等待功能完成?

  15. 15

    如何等待诺言完成

  16. 16

    如何等待功能完成?

  17. 17

    如何等待任务完成

  18. 18

    Javascript异步如何等待不同数量的uploadTasks全部完成?

  19. 19

    Python如何等待使用列表完成阅读?

  20. 20

    如何等待Javascript forEach循环完成后再继续进行下一个Sep

  21. 21

    在完成Rxjs Observable之前,如何等待内部定义的异步方法?

  22. 22

    在程序继续在Java中运行之前,如何等待事件完成

  23. 23

    在调用build方法之前,如何等待asynch方法完成以加载数据?

  24. 24

    从C#中的方法返回之前如何等待所有任务完成

  25. 25

    如何等待并行Linq动作完成

  26. 26

    AngularJS:如何等待$ resource完成?

  27. 27

    如何等待document.write完成

  28. 28

    我如何等待外部过程完成?

  29. 29

    如何等待所有NSOperations完成?

热门标签

归档