1

我有一个thunk名为logInline(改编自Co 文档)。

我注意到 thunkifiedget似乎总是yield一个数组。这是设计使然吗?它是这样thunkify做的,还是它的标准部分yield

var co = require('co'),
  get = thunkify(request.get);

var logInline = co(function *(){
  var google = yield get('http://google.com'); 
  console.log(google[0].statusCode);
})

logInline()

请注意,这里的变量 'google' 始终是一个数组。为什么?请注意,request.get通常返回err, response(即,没有数组)。

脚本,顺便说一句,返回200或 google.com 返回的任何其他响应代码。

,产量文档是相当稀疏的 ATM。

编辑: Thunks 并不总是返回数组。例如,如果var readFile = thunkify(fs.readFile);

var fileContents = yield readFile('myfile', 'utf8');
log(fileContents);

在这种情况下,fileContents 不会在数组中返回。那么为什么谷歌在一个数组中呢? thunkify 中似乎有一些东西可以控制 thunk 返回的内容

4

1 回答 1

5

我注意到 thunkified get 似乎总是产生一个数组。这是设计使然吗?

我不知道也无法确认,正如您所说的(coyield的,这里不感兴趣)文档非常稀少。

然而,我可以想象这yield确实会导致回调的参数数组,以轻松支持多个返回值。您可以使用解构赋值来获取单个结果:

co(function *(){
  var [google] = yield get('http://google.com'); 
  console.log(google.statusCode);
})

编辑:

thunkify 中似乎有一些东西可以控制 thunk 返回的内容

事实上,这只是偶尔发生。我现在检查了代码,上面写着

if (arguments.length > 2) res = slice.call(arguments, 1);

因此,如果使用多个结果参数(错误参数被忽略)调用回调函数(thunkified 调用,但想象它是传递给fs.readFile或直接传递的那个),那么一个数组将被编入您的生成器代码。request.getyield

于 2014-04-11T14:21:17.313 回答