0
我有一個非常乾淨簡單的方法,使用Node V8 Promisfy()和異步函數執行「await runJob()」。我遇到的問題是我需要處理childProcess.execFile()返回的子對象。所以現在我有一個非常混亂的解決方案,但是我顯然不滿意它。任何想法如何清理?簡化節點V8 childprocess.exec
前:
const invoke = util.promisify(childProcess.execFile)
async runJob() {
try {
const std = await invoke(this.FMEPath, ["PARAMETER_FILE", this.fmeParamFile], { cwd: this.root })
this.stderr = std.stderr
this.stdout = std.stdout
} catch (err) {
this.errors++
logger.addLog('error', "FMEjob.runJob - childProcess.execFile failed: %s", err.message, { paramFile: this.fmeParamFile, error: err })
}
}
後:
async runJob() {
return new Promise((resolve, reject) => {
this.child = execFile(this.FMEPath,
["PARAMETER_FILE", this.fmeParamFile],
{ cwd: this.root },
(err, stdout) => {
if (err) {
this.errors++
logger.addLog('error', "FMEjob.runJob - childProcess.execFile failed: %s", err.message, { paramFile: this.fmeParamFile, error: err })
return reject(false)
} else {
this.stderr = stderr
this.stdout = stdout
resolve(true)
}
})
})
}
不會通話常量運行ning =等待this.runJob()馬上得到真值。我擁有它的方式是runJob()返回一個承諾。這改變了這一點。 –
不,'runJob' - 一個'async'函數 - 仍然會返回一個承諾。這就是爲什麼你必須「等待」它,並在稍後得到「真」。 – Bergi