我试图返回我的方法的stdout
,但在客户端上我总是有未定义
,尽管服务器说它是一个字符串
有内容。
我这样做:
'getExistingFiles': function () {
var list = "";
return new Promise(Meteor.bindEnvironment(function(resolve) {
child = exec_tool("ls -al",
function (error, stdout, stderr) {
if (error !== null) {
console.error('exec error: ' + error);
list = "error: " + error;
resolve(list);
return list;
}else{
list = stdout;
console.log(typeof list);
console.log("LIST:------------");
console.log(list);
resolve(list);
return list;
}
});
}));
}
但是在客户端上,当我尝试访问该值时,它是未定义
:
Meteor.call("getExistingFiles",function(list){
console.log(list);
console.log(typeof list);
});
所以我的问题是,如何将此列表
发送给客户端?
[编辑]我尝试这样测试是否是我的客户端错了,但我认为不是在服务器上
//server
var et = Meteor.wrapAsync(exec_tool);
try {
child = et('ls -al');
console.log("LIST:------------");
console.log(child);
console.log(typeof child);
return child;
} catch (err) {
throw new Meteor.Error(err, err.stack);
}
[EDIT2]即使这样它也会发送一个未定义
为什么?!
var et = Meteor.wrapAsync(exec_tool);
try {
var proc = exec_tool("ls -al")
proc.stdout.on('data', function (data) {
//do something with data
console.log(data);
list = list + data;
});
proc.stdout.on('end', function() {
console.log("end");
console.log(list);
return list;
});
} catch (err) {
throw new Meteor.Error(err, err.stack);
}
最佳答案
在服务器上(来自服务器的 promise 被评估,然后在完成后发送到客户端):
getExistingFiles: function () {
return new Promise((resolve, reject) => {
child = exec_tool("ls -al",
function (error, stdout, stderr) {
if (error) {
reject(error);
} else {
resolve(stdout);
}
});
}));
}
在客户端:
Meteor.call("getExistingFiles", function(err, list) {
if(err) {
// handle your error
throw err;
}
console.log(list);
});
promise 没有返回
。来自异步函数的回调通常具有 function (error, result)
参数列表。因此,想要的结果应该在第二个参数中。像这样尝试一下。
关于javascript - 如何将 sdtout 从服务器返回到字符串内的客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44110441/