当使用链式承诺时,Finally 在最后一个 .then 之前执行

Finally executes before last `.then` when using chained promises

为什么我的最后一个.then (writeLin..) 没有运行?

注意:triggercommand returns returns 承诺

的函数
 .then(function () {

    if (fs.existsSync(tempDir + '/' + repoName)) {
      return self.triggerCommand("git", ["checkout", "master"], {cwd: tempDir + '/' + repoName})()
        .then(
        self.triggerCommand("git", ["pull", "master"], {cwd: tempDir + '/' + repoName})
      )
    }
    return self.triggerCommand("git", ["clone", remote], {cwd: tempDir});
  }
)

  .then(
    writeLine("Git clone/pull complete.")//this never runs
)

.finally(function () {
    //this runs

根据 Promises 规范,then 函数应该 接收一个函数,只要 promise 被解析,该函数就会被调用。

您的 writeLine("Git clone/pull complete.") 将在配置 then 链时 运行,因为它 未包装在函数中

修复很简单:

.then(function () {
    if (fs.existsSync(tempDir + '/' + repoName)) {
      return self.triggerCommand("git", ["checkout", "master"], {cwd: tempDir + '/' + repoName})()
        .then(
        self.triggerCommand("git", ["pull", "master"], {cwd: tempDir + '/' + repoName})
      )
    }
    return self.triggerCommand("git", ["clone", remote], {cwd: tempDir});
  }
)
.then(function(){
  writeLine("Git clone/pull complete.")
})
.finally(function () {
    //this runs
})