当使用链式承诺时,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
})
为什么我的最后一个.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
})