Javascript 节点原型和异步

Javascript 节点原型和异步,javascript,node.js,asynchronous,prototype,Javascript,Node.js,Asynchronous,Prototype,调用log()时,如何在read()中返回异步函数的值?我知道代码可能不是100%正确,但我希望你能理解。我在谷歌上搜索了一下,但还是有点困惑。希望有人能帮我 function Whatever(directory) { this.source = 'someDir'; } Whatever.prototype.read = function (dir) { dir = dir || this.source; recursive(dir, ['.*'], function (er

调用log()时,如何在read()中返回异步函数的值?我知道代码可能不是100%正确,但我希望你能理解。我在谷歌上搜索了一下,但还是有点困惑。希望有人能帮我

function Whatever(directory) {
  this.source = 'someDir';
}

Whatever.prototype.read = function (dir) {
  dir = dir || this.source;

  recursive(dir, ['.*'], function (err, files) {
    if (err) throw err;
    return files;
  });

};

Whatever.prototype.log = function() {

  console.log(this.read());

};

您可以向read函数添加回调,方法与递归函数相同,例如:

Whatever.prototype.read = function (dir, callback) {
    dir = dir || this.source;
    recursive(dir, ['.*'], callback);
};
然后将错误检查和用法放入日志函数中:

Whatever.prototype.log = function() {
    this.read(function(err, files){
        if(err){ throw err; }
        console.log(files);
    });
};

网上有很多详细解释回调的链接,您应该对此进行调查。不过,一旦你掌握了这些,我建议你阅读一下承诺,因为它们更容易处理。

谢谢,马特。这正是我想要的。我肯定有一些阅读要做。糟糕的模式会抛出这样的错误,无处捕捉它。使用承诺