jjzjj

Generator

全部标签

ruby - 使用 ruby​​ 2.4 安装 json 1.8.3 时出错

[版本信息]ruby2.4.0p0(2016-12-24修订版57164)[x86_64-linux]/gem2.0.3/Windows10我运行了bundleinstall,它告诉我运行geminstalljson-v'1.8.3'我这样做了,但得到了一个Failedtobuildgemnativeextension错误。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingjson:ERROR:Failedtobuildgemnativeextension./home/ec2-user/.rvm/ru

javascript - ES6 异步生成器结果

ES6有generatorsthatreturniterators:function*range(n){for(leti=0;i有一个关于返回Promises的异步函数的提议:asyncfunctionf(x){lety=awaitg(x);returny*y;}f(2).then(y=>{console.log(y);});那么如果我将两者结合起来会发生什么,就像这样:asyncfunction*ag(n){for(leti=0;i它返回什么?是Promise>?Iterator>?还有别的吗?我该如何食用它?我想应该有一个相应的for循环,什么将异步迭代其结果,例如:for(awa

javascript - 修改生成器函数原型(prototype)

长话短说我想修改生成器函数实例的原型(prototype)——即调用function*返回的对象。假设我有一个生成器函数:function*thing(n){while(--n>=0)yieldn;}然后,我创建一个实例:letfour=thing(4);我想定义一个名为exhaust的生成器原型(prototype),如下所示:four.exhaust(item=>console.log(item));这会产生:3210我可以通过这样做来破解它:(function*(){})().constructor.prototype.exhaust=function(callback){let

javascript - 在 ES6 中,第一次调用迭代器的 `next` 方法时参数会发生什么变化?

如果你有一个生成器,比如,function*f(){//Beforestuff.leta=yield1;letb=yield2;return[a,b];}然后运行varg=f();//thisquestionisoverthisvalue.g.next(123);//returns:{value:1,done:false}g.next(456);//returns:{value:2,done:false}g.next();//returns:{value:[456,undefined],done:true}第一次调用.next()设置a为123,第二次调用设置b到456,但是在最后一次

javascript - 我们可以用 ES6 Generator 做哪些不能用 for 循环做的事情?

我了解了ES6的特性,Generators引起了我的注意。突然想到的一件事是链接Promise对象,这是我无法用循环实现的。我们还能做哪些以前做不到的其他机制?我知道这是一个宽泛的问题,但目前我仍然想不出除了Promises之外的任何东西。 最佳答案 通过使用yield,生成器可以在函数控制流中的任何点暂停,从而保存当前的执行状态(作用域和堆栈)。没有生成器,这就更复杂了:你需要明确地跟踪状态分支和(尤其是)循环控制结构需要以函数式方式表示,即递归编写。生成器通常可用于遍历数据结构,创建一个简单的类似流的迭代器,按顺序生成所有元素。

javascript - 如果调用了 .bind() 函数,是否无法判断函数是否为生成器函数?

似乎在任何生成器函数上调用.bind(this)都会破坏我查看该函数是否为生成器的能力。关于如何解决此问题的任何想法?varisGenerator=function(fn){if(!fn){returnfalse;}varisGenerator=false;//Fastermethodfirst//Calling.bind(this)causesfn.constructor.nametobe'Function'if(fn.constructor.name==='GeneratorFunction'){isGenerator=true;}//Slowermethodsecond//Cal

Javascript ES6 生成器异步

我需要异步运行生成器(我需要在控制台1、2、3、4、5中得到结果,因为现在我有4、1、2、3、5)有人可以帮助我吗?我需要运行任务并等待上一个任务完成后再运行下一个任务。我需要使用(如果可能:仅)生成器(或生成器+promise?)这是我的代码/*jshintesnext:true*/functionshow(msg){var_msg=msg;setTimeout(function(){console.log(_msg);},2000);}functionshow2(msg){console.log(msg);}varstack=[];//addsomefunctiontostacks

Javascript 生成器问题 - 解释这段代码

我正在阅读FlavioScopes的“TheJavaScriptHandbook”。他介绍了生成器的概念。function*calculator(input){vardoubleThat=2*(yield(input/2))varanother=yield(doubleThat)return(input*doubleThat*another)}//Hethenrunsthefollowingcodeconstcalc=calculator(10)console.log(calc.next())输出{value:5,done:false}calc.next(7);输出:{value:14

javascript - 如何识别 ES6 生成器

假设我有一个这样的生成器函数:varg=function*(){yield1;yield2;yield3;};vargen=g();我如何以编程方式判断g是一个生成器函数,或者gen是一个迭代器?这似乎是一种可能性:g.constructor.name==='GeneratorFunction'有没有更好的办法?更新:我结束了takinganapproach类似于Eric'sanswer,但使用eval首先确定目标平台是否支持生成器。这是实现:varGeneratorConstructor=(function(){try{vargenerator;returneval('generat

javascript - (为什么)我不能从生成器中抛出异常吗?

我试图从ES6生成器函数的主体中抛出异常,但它没有通过。这是ES6规范的一部分还是Babel的怪癖?这是我试过的代码(onbabeljs.io):function*gen(){thrownewError('x');}try{gen();console.log('notthrowing');}catch(e){console.log('throwing');}如果这确实是指定的ES6行为,那么发出异常信号的替代方法是什么? 最佳答案 您创建了一个迭代器但没有运行它。varg=gen();g.next();//throws'x'(onb