为什么thunkify / yield总是返回一个数组?
我有一个名为logInline的thunk
(从Co文档改编而来)。
我注意到thunkified get
似乎总是yield
一个数组。 这是由devise? 这是做这件事,或者它是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()
注意这里的variables“google”总是一个数组。 为什么? 请注意, request.get
通常返回err, response
(即没有数组)。
该脚本,BTW,返回200
或任何其他响应代码google.com返回。
唉产量文件是相当稀疏的ATM。
编辑: Thunk不总是返回数组。 例如,如果var readFile = thunkify(fs.readFile);
:
var fileContents = yield readFile('myfile', 'utf8'); log(fileContents);
在这种情况下,fileContents不会在数组中返回。 那么为什么谷歌里面的数组? thunkify似乎有什么东西来控制thunk的回报
我注意到thunkified get似乎总是产生一个数组。 这是由devise?
我不知道,也不能确认,因为你说的文件(co, yield
在这里是不感兴趣的)相当稀less。
然而,我可以想象, yield
的确会导致参数 – callback数组,以轻松支持多个返回值。 您可以使用解构赋值来获取单个结果:
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.get
的调用函数)被多个result参数调用(error参数被忽略),那么数组将被发送到您的发生器代码。