所有异步功能完成后执行功能?

Joh*_*son 1 javascript promise es6-promise

this.validate_label_population();
this.validate_title_prefix();
this.validate_title_suffix();
this.executeGitCommentCreation();
Run Code Online (Sandbox Code Playgroud)

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

例:

  async validate_title_prefix() {
    console.log('validate_title_prefix not implemented');
  }
Run Code Online (Sandbox Code Playgroud)

我想this.executeGitCommentCreation();在之前运行之后执行最后一次.做这个的最好方式是什么?我应该在前3名前面等待,还是使用某种Promise.all?

Duc*_*lan 5

您可以使用此代码段:

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

或者你可以使用箭头功能来获得正确的上下文:

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

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

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

有关更多信息,请阅读文档.

P/s:您的命名约定不统一(与驼峰案例和蛇案混合).我建议camelCase在变量/函数,PascalCase类和ALL_CAPS常量上使用.

  • 是否需要调用这些函数?根据我的测试,他们会这样做,但在你的例子中,他们不是 (2认同)
  • 因为`executeGitCommentCreation`似乎没有参数,如果它真的忽略它们,你可以`Promise.all([....]).然后(this.executeGitCommentCreation)`从而不需要绑定`this` (2认同)