3

私は Node を初めて使用し、その非ブロッキング要素のいくつかにつまずいています。オブジェクトを作成しようとしていて、その要素の 1 つが child_process.exec の stdout を返す関数であるようにします。

var exec = require('child_process').exec;
var myObj = {};

myObj.list = function(){
  var result;
  exec("ls -al", function (error, stdout, stderr) {
     result = stdout;
  });
  return result;
}
console.log('Ta da : '+myObj.list);

として設定される前にmyObj.list返されていると思いますが、待機させる方法やコールバックを行う方法がわかりません。ご協力いただきありがとうございます!resultstdout

4

1 に答える 1

4

少しの間利用できないため、値を直接返すことはできません。したがって、戻り値の代わりにコールバックを使用する必要があります。これは、呼び出し元のコードを少し裏返しにすることを意味します。

var exec = require('child_process').exec;
var myObj = {};

myObj.list = function(callback){
  var result;
  exec("ls -al", function (error, stdout, stderr) {
     callback(stdout);
  });
  // No return at all!
}
// Instead of taking a return we pass a callback
// which receives the value and carries on our computation.
myObj.list(function (stdout) {
   console.log('Ta da : '+ stdout);
});

実際のコードでは、おそらく最初の引数としてコールバックにエラーを取得させたいと思うでしょう。その必要はありませんが、Node.JS で行われる通常の方法です。

于 2012-04-22T19:35:03.667 に答える