node.js javascript函数,用于返回Promise操作的结果

7eumitmz  于 2023-03-01  发布在  Node.js
关注(0)|答案(2)|浏览(150)

我的结论是,经过长时间的搜索和尝试,它不能在node.js上的js上完成。
一个例子(适用于所有承诺的例子):
我需要开发一个通用JS函数来获取linux命令并返回结果,结果是linux命令的输出(例如:pwd输出:/家/jery)
函数需要等待结果,因为下一个命令行需要它的输出-所以编程是串行的
我可以执行一个循环来等待Promise完成,但是无限循环将消耗CPU,并且nodejs没有真实的的sleep命令。

result1 = shell("pwd")
result2 = shell("ls " + result1)

这个shell linux只是一个例子,我同样需要调用url的函数,或者从mysql服务器获取sql查询的函数。要点是串行编程-所以解决方案必须符合。
再给予一个例子,shell()函数将被调用数百次,等待那么多的承诺完成是不可能的,因此一个函数的输出需要成为其他函数的输入。
谢谢你j.r
尝试序列化Promises函数导致等待时CPU占用率过高。

nwnhqdif

nwnhqdif1#

const util = require('util');
const exec = util.promisify(require('child_process').exec);

async function runShellCommand(command) {
  const {
    stdout,
    stderr
  } = await exec(command);
  return stdout
}

runShellCommand("dir").then(result => {
    console.log(result)
})

有了这段代码,我可以使用返回值result打印dir命令的输出。这回答了您关于捕获shell命令输出的问题的第一部分。尝试从异步函数中生成同步函数不仅困难且不切实际,而且解决方案也很可能是您应该尽量避免的一些黑客行为

osh3o9ms

osh3o9ms2#

把你的文件保存为foo.mjs,这个也可以用(改编自@Isak The Hacker)

import { promisify } from 'node:util';
import { exec } from 'node:child_process';

const execPromise = promisify(exec);

const {
  stdout,
  stderr
} = await execPromise(command);

console.log(stdout);

相关问题