2017-06-22 6 views
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) 
       } 
      }) 
    }) 
} 

答えて

3

のみ、コールバックと何も内部resolve/reject入れ:

async runJob() { 
    try { 
     const std = await new Promise((resolve, reject) => { 
      this.child = execFile(this.FMEPath, ["PARAMETER_FILE", this.fmeParamFile], { cwd: this.root }, (err, std) => { 
       if (err) reject(err); 
       else resolve(std); 
      }); 
     }); 
     this.stderr = std.stderr 
     this.stdout = std.stdout 
     return true; 
    } catch (err) { 
     this.errors++ 
     logger.addLog('error', "FMEjob.runJob - childProcess.execFile failed: %s", err.message, { paramFile: this.fmeParamFile, error: err }) 
     throw false; 
    } 
} 
+0

を呼び出しませんコンスタントランning = this.runJob()が真の値をすぐに取得するのを待ちます。私が持っている方法は、runJob()が約束を返すことです。これはそれを変えます。 –

+0

いいえ、 'runJob' - ' async'関数 - まだ約束を返します。それで、あなたはそれを「待つ」必要があり、後に「真」を得るでしょう。 – Bergi