为什么thunkiy/yield总是返回一个数组



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

我注意到如此链接的getyield看来总是一个数组。这是故意的吗?是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(即,没有数组)。

脚本BTW返回200或google.com返回的任何其他响应代码。

遗憾的是,收益率文档是相当稀疏的ATM。

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

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

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

我注意到被击倒的get似乎总是产生一个数组。这是故意的吗?

我不知道,也不能证实,正如你所说的,文档(对于co,yield在这里不感兴趣)非常稀疏。

然而,我可以想象yield确实会导致回调的参数数组,以方便地支持多个返回值。您可以使用析构函数赋值来返回单个结果:

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

编辑:

thunkify中似乎有某种东西控制着thunkiy返回的

事实上,这种情况只是偶尔发生。我现在检查了代码,它读取

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

因此,如果回调函数(thunkinized调用的回调函数,但假设它是直接传递给fs.readFilerequest.get的回调函数)是用多个结果参数(忽略错误参数)调用的,那么一个数组将被yield转换为生成器代码。

最新更新