我正在尝试开发一种具有以下功能的方法: -调用返回类对象的函数 -将此对象推送到数组 -打印新数组
返回类对象的函数使用exec()函数来使用命令行执行脚本。这可能需要花费几秒钟的时间。
SampleFunction(data) {
const xyzObject = xyz.otherfunction(data);
//other function takes a number of seconds to finish
this.array.push(xyzObject); // Push object onto the array
console.log(array);
return xyzObject;
}
在我的代码中,甚至在返回对象之前,将数组打印到控制台。我该如何解决?
答案 0 :(得分:3)
理想情况:重新组织代码,使其正确处理exec
是异步操作这一事实。例如,您的函数可以接受回调或返回承诺,而不是直接返回结果。
在大多数情况下,它是非常第二好的答案:您可以使用execSync
。
答案 1 :(得分:0)
我建议阅读有关该主题的this blogpost。
基本上,您需要将调用转换为Promise,然后在等待命令完成时使用async / await运算符暂停线程。
答案 2 :(得分:0)
遵循这些思路可以完成工作:
// const { exec, execFile } = require('child_process');
const xyz = {
otherfunction: data => {
return new Promise((resolve, reject) => {
// you do your exec() here with something like that:
// exec('<command>', (err, stdout, stderr) => {
// execFile('<file>', (err, stdout, stderr) => {
// if (err) { reject(err) }
// resolve(stdout);
// });
setTimeout(() => {
resolve(data);
}, 1000);
});
}
};
const SampleFunction = async function(data) {
let array = [];
const xyzObject = await xyz.otherfunction(data);
//other function takes a number of seconds to finish
array.push(xyzObject); // Push object onto the array
console.log(array);
return xyzObject;
}
SampleFunction([
{city: 'Los Angeles', state: 'CA', population: '4M'},
{city: 'New York City', state: 'NY', population: '8.4M'},
{city: 'Atlanta', state: 'GA', population: '0.5M'},
]);
如果您实际上正在执行脚本文件,建议您使用execFile
。