ข้อกำหนด
สิ่งนี้จะต้องใช้ Node.js 7 ขึ้นไปพร้อมการสนับสนุนสำหรับ Promises และ Async / Await
สารละลาย
สร้างฟังก์ชัน wrapper ที่ใช้ประโยชน์จากสัญญาว่าจะควบคุมลักษณะการทำงานของchild_process.exec
คำสั่ง
คำอธิบาย
การใช้สัญญาและฟังก์ชันอะซิงโครนัสคุณสามารถเลียนแบบพฤติกรรมของเชลล์ที่ส่งคืนเอาต์พุตโดยไม่ตกอยู่ในนรกเรียกกลับและด้วย API ที่ค่อนข้างเรียบร้อย การใช้await
คำหลักคุณสามารถสร้างสคริปต์ที่อ่านได้อย่างง่ายดายในขณะที่ยังสามารถทำงานให้child_process.exec
เสร็จได้
ตัวอย่างโค้ด
const childProcess = require("child_process");
/**
* @param {string} command A shell command to execute
* @return {Promise<string>} A promise that resolve to the output of the shell command, or an error
* @example const output = await execute("ls -alh");
*/
function execute(command) {
/**
* @param {Function} resolve A function that resolves the promise
* @param {Function} reject A function that fails the promise
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
*/
return new Promise(function(resolve, reject) {
/**
* @param {Error} error An error triggered during the execution of the childProcess.exec command
* @param {string|Buffer} standardOutput The result of the shell command execution
* @param {string|Buffer} standardError The error resulting of the shell command execution
* @see https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback
*/
childProcess.exec(command, function(error, standardOutput, standardError) {
if (error) {
reject();
return;
}
if (standardError) {
reject(standardError);
return;
}
resolve(standardOutput);
});
});
}
การใช้งาน
async function main() {
try {
const passwdContent = await execute("cat /etc/passwd");
console.log(passwdContent);
} catch (error) {
console.error(error.toString());
}
try {
const shadowContent = await execute("cat /etc/shadow");
console.log(shadowContent);
} catch (error) {
console.error(error.toString());
}
}
main();
ตัวอย่างผลลัพธ์
root:x:0:0::/root:/bin/bash
[output trimmed, bottom line it succeeded]
Error: Command failed: cat /etc/shadow
cat: /etc/shadow: Permission denied
ลองออนไลน์
Repl.it
แหล่งข้อมูลภายนอก
สัญญา .
child_process.exec
.
ตารางการสนับสนุน Node.js