代码之家  ›  专栏  ›  技术社区  ›  John Lippson

在所有异步函数完成后执行函数?

  •  1
  • John Lippson  · 技术社区  · 6 年前
    this.validate_label_population();
    this.validate_title_prefix();
    this.validate_title_suffix();
    this.executeGitCommentCreation();
    

    我在构造函数中执行以下函数。前3/4是异步函数:

    示例:

      async validate_title_prefix() {
        console.log('validate_title_prefix not implemented');
      }
    

    我想执行 this.executeGitCommentCreation(); 上一个在前一个运行之后。最好的方法是什么?我应该把wait放在前三名的前面,还是使用某种承诺。全部的

    1 回复  |  直到 6 年前
        1
  •  6
  •   Duc Filan    6 年前

    您可以使用以下代码段:

    Promise.all([
        this.validate_label_population(), 
        this.validate_title_prefix(), 
        this.validate_title_suffix()
    ])
    .then(function(values) {
        this.executeGitCommentCreation();
    }.bind(this));
    

    也可以使用箭头函数获取正确的上下文:

    Promise.all([
        this.validate_label_population(), 
        this.validate_title_prefix(), 
        this.validate_title_suffix()
    ])
    .then(values => {
        this.executeGitCommentCreation();
    });
    

    或者您甚至可以将此缓存到外部上下文:

    var _this = this;
    Promise.all([
        this.validate_label_population(), 
        this.validate_title_prefix(), 
        this.validate_title_suffix()
    ])
    .then(function(values) {
        _this.executeGitCommentCreation();
    });
    

    有关更多信息,请阅读 the docs

    注意:您的命名约定不统一(混合了驼色和蛇形)。我建议使用 camelCase 在变量/函数上, PascalCase 在课堂上,以及 ALL_CAPS 关于常数。