javascript - 如何将 sdtout 从服务器返回到字符串内的客户端?

标签 javascript string meteor promise client-server

我试图返回我的方法的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;
            }
          });
      }));
}

在我的终端上有日志: enter image description here

但是在客户端上,当我尝试访问该值时,它是未定义:

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/

相关文章:

javascript - 在 Mongodb 中执行数据清理

mongodb - meteor 应用程序在 vagrant share 上的问题

javascript - JS 拼接空值数组会删除最后一个索引,无论参数如何

javascript - 如何在 phonegap Windows Phone 中从 javascript 调用 c# 代码

javascript - 在 Vue Ant Design 中使用 Modal.method() 的 onOk 属性

javascript - Jquery 字符串中某些字符的问题

c++ - QString 通过引用传递问题

javascript - 1像素Gif作为新的测量工具? o_O BLANK_IMAGE_URL 是做什么用的?

string - Scala 将多行字符串转换为 BigInt

meteor - Iron Router 在加载 WaitOn : Meteor 之前显示我未找到的模板