首页 > 解决方案 > 如何处理异步/等待格式的回调函数的多个参数?

问题描述

在 shelljs 中,exec 函数在 callback 中有 3 个参数(err, stdout, stderr)。在async/awaitby中使用它时promisify(shelljs.exec),我无法捕捉到stderr?

const { promisify } = require('util'),
  shellExec = promisify(shelljs.exec);

....

// in the function

try {
 variableName = await shellExec('some valid shell command', {});

 return variableName;
}
catch (err) {
  console.log(err);
}

如果 shelljs exec 返回代码 0 即有效响应,它工作正常,但是当命令无效时,它返回 1。

我无法获得stderr.

标签: javascriptnode.jscallbackasync-awaittry-catch

解决方案


我假设您希望在使用 async/await 的同时输出 stderr 的值。像这样的东西可能有用:

var shelljs = require('shelljs');

async function promiseExec(input) {
  return new Promise((resolve, reject) => {
    let { err, stdout, stderr } = shelljs.exec(input);
    shelljs.exit(1);
    if(stdout === "") reject(stderr);
    resolve(stdout);
  })
}

async function main () {
  let result = await promiseExec('dir');
  console.log(result);
}

main();

推荐阅读