Node.js中挂起的异步文件操作

时间:2015-12-01 03:18:30

标签: javascript node.js asynchronous suspend

我在使用Suspend返回值时遇到一些麻烦。我一直在"未定义" (我能够在函数中使用变量"文件"我只能将它返回):

var fs = require('fs');
var recursive = require('recursive-readdir');
var suspend = require('suspend');

function foo () {}

foo.prototype.readfiles = suspend(function*() {
    var files = yield recursive('src', suspend.resume());
    return files;
});

foo.prototype.build = function() {
    console.log(this.readfiles()); //undefined 
    return this;
};

new foo()
    .build()

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您正确使用挂起,但不能与console.log()一起使用,它将异步触发。 Console.log()不是生成器函数;它不会等待收益率陈述的结果。相反,您需要在yield返回值后显式调用console.log()语句。

以下代码可用于注销您的文件:



var fs = require('fs');
var recursive = require('recursive-readdir');
var suspend = require('suspend');

function foo() {}

foo.prototype.readfiles = suspend(function*() {
  var files = yield recursive('src', suspend.resume());
  console.log(files) // prints out your files
  return files;
});

foo.prototype.build = function() {


  // console.log(this.readfiles()); //undefined 
  // return this;

  return this.readfiles();
};

new foo()
  .build()