0
ノードV8のPromisfy()と非同期関数を使用して、「待機している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