Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 简化节点V8 childprocess.exec_Javascript_Node.js_Promise_Async Await - Fatal编程技术网

Javascript 简化节点V8 childprocess.exec

Javascript 简化节点V8 childprocess.exec,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,我使用Node V8 Promisfy()和异步函数以一种非常简洁的方式完成了“wait runJob()”。我遇到的问题是,我需要一个由childProcess.execFile()返回的子对象的句柄。所以现在我有了一个非常混乱的解决方案。。。但我显然对此不满意。关于如何清理这个有什么想法吗 之前: const invoke = util.promisify(childProcess.execFile) async runJob() { try { const std

我使用Node V8 Promisfy()和异步函数以一种非常简洁的方式完成了“wait runJob()”。我遇到的问题是,我需要一个由childProcess.execFile()返回的子对象的句柄。所以现在我有了一个非常混乱的解决方案。。。但我显然对此不满意。关于如何清理这个有什么想法吗

之前:

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)
                }
            })
    })
}
之后:

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)
                }
            })
    })
}

仅将
解析
/
拒绝
放在回调中,而不放其他内容:

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;
    }
}

仅将
解析
/
拒绝
放在回调中,而不放其他内容:

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;
    }
}

调用const running=wait this.runJob()是否会立即获得true值。我的理解是runJob()返回一个承诺。这改变了。不,
runJob
——一个
async
函数——仍然返回一个承诺。这就是为什么您必须
等待它
并且稍后将获得
true
的原因。调用const running=wait this.runJob()不会立即获得true值吗。我的理解是runJob()返回一个承诺。这改变了。不,
runJob
——一个
async
函数——仍然返回一个承诺。这就是为什么您必须等待它,并在以后得到
true