检测函数是否为生成器

时间:2014-03-13 07:19:19

标签: node.js generator yield

为了准备全面采用产量支持,我已经发现看似缺乏。

有没有办法检测某个函数是否是nodejs 0.11 +?

中的生成器

1 个答案:

答案 0 :(得分:2)

我不喜欢这样:

var
  // pull out regex for speed
  genRegex = /^function[\s]*\*/,

  detectGenerator = function(mth){
    return (typeof mth == 'function') &&
    genRegex.test(mth.toString());
  };


function * foo (){};
function *bar (){};
function* baz (){};
function*qux (){};
function non (){};

console.log(detectGenerator(function (){}), detectGenerator(function(){})) // false, false
console.log(detectGenerator(function  *(){}), detectGenerator(function*  (){})) // true, true
console.log(detectGenerator(function * (){}), detectGenerator(function*(){})) // true, true
console.log(detectGenerator(foo), detectGenerator(bar)) // true, true
console.log(detectGenerator(baz), detectGenerator(qux)) // true, true
console.log(detectGenerator(non)) // false

但它确实有效。

如果您有更好的选择,请回复。