【问题标题】:How to handle multiple args of callback function in async/await format?如何处理异步/等待格式的回调函数的多个参数?
【发布时间】:2019-05-13 16:18:02
【问题描述】:

在 shelljs 中,exec 函数在回调 (err, stdout, stderr) 中有 3 个参数。当promisify(shelljs.exec)async/await 中使用它时,我无法捕捉到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

【问题讨论】:

  • 等待的 promise 的返回值应该有一个带有 stderr 的对象。阅读此2ality.com/2017/05/util-promisify.html 第 3 点
  • 这正是我想知道的,但它并没有解决我的问题。问题在于 shelljs,如果 shell 出错,如果去 catch 块而不是 then。

标签: javascript node.js callback async-await try-catch


【解决方案1】:

我假设您希望在使用 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();

【讨论】:

  • 此代码有效,但我无法区分 stderrstdout
  • 你可以从 promise 返回一个对象并解构键。您的要求可以通过简单的方式完成,因为您在承诺定义中将 stdout 和 stderr 分开,
猜你喜欢
  • 2020-03-07
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 2018-01-03
  • 2023-02-10
  • 2017-03-31
相关资源
最近更新 更多