草庐IT

javascript - 如何在 coffeescript 中启用和声语法支持?

我使用带有--harmony标志的node.js(0.11.13)并使用function*()和yield关键字。我试图在coffeescript的帮助下简化我在node.js上的开发,到目前为止它运行良好,但我在yield和声明生成器方面遇到了麻烦-它提示'reserved关键字产量'。有什么想法吗? 最佳答案 另一种打开黑色维度之门的方法是:co=require'co'sleep=require'co-sleep'co(`function*(){1`console.log'hi!'`yieldsleep(1000)`consol

javascript - 为什么 javascript 生成器函数的 yield 语句返回 .next() 的参数?

我偶然发现了generatorfunctionsonMDN令我困惑的是以下示例:function*logGenerator(){console.log(yield);console.log(yield);console.log(yield);}vargen=logGenerator();//thefirstcallofnextexecutesfromthestartofthefunction//untilthefirstyieldstatementgen.next();gen.next('pretzel');//pretzelgen.next('california');//calif

javascript - JavaScript 中奇怪的 yield 语法

我刚刚看了DaveHerman的非常有趣的task.js.在他的例子中,他有这一行:var[foo,bar]=yieldjoin(read("foo.json"),read("bar.json")).timeout(1000);我熟悉生成器,但我不明白yield表达式如何计算出可以分配给[foo,bar]的东西。我实际上不希望表达式可以分配给任何东西,因为它基本上与return相同。JS的yield语法似乎仍然有点文档不足,我找不到相关信息。所以澄清一下我的问题:最终分配给foo和bar的是什么? 最佳答案 其实相关段落在https

javascript - 为什么这个生成器会跳过 try block 之外的 yield?

背景我正在试验Generator.prototype.throw()的工作原理并做了这个例子:varmyGen=function*(){try{yield1;yield2;yield3;yield4;yield5;}catch(err){console.log(err);}yield7;yield8;yield9;}varmyIterator=myGen();console.log(myIterator.next());console.log(myIterator.next());console.log(myIterator.next());myIterator.throw(newEr

javascript - 在 javascript 的协作线程意义上是否有正确的 'yield' 方法?

我正在编写一个无处不在的插件,ajax查询的长函数回调阻塞了GUI线程,导致firefox锁定。明显的解决方案似乎是使用某种延迟执行(即我们希望定期将执行此查询函数添加到事件队列的末尾,然后允许其他命令待执行。我能想到的唯一方法是使用超时为零的settimeout...这是否保证有效,或者是否有更好的方法。 最佳答案 使用setTimeout并设置一个非常小的超时时间(0或者如果您感到偏执,则非常接近于零)是在浏览器上下文中执行此操作的唯一方法。它工作得很好而且非常可靠,但一定要足够频繁地产生,但不要太,因为它确实需要一段时间才能返

javascript - Generator.next() 如何处理它的参数?

documentation说“您还可以为next方法提供一个参数,以将值发送到生成器。”它发送到哪里?例如,采用这3个生成器:function*one(){while(true){varvalue=yieldnull;}}varg1=one();g1.next();g1.next(1000);//yieldsnullfunction*two(){vari=0;while(true){i+=yieldi;}}varg2=two();g2.next();g2.next(1000)//yields1000function*three(){varindex=0;while(true)yield

javascript - yield [] 和 yield all() 的区别 - ES6/redux-saga

与ES6的内置yield[]相比,使用redux-saga的yieldall([])有什么优势吗?要并行运行多个操作,redux-saga建议:constresult=yieldall([call(fetchData),put(FETCH_DATA_STARTED),]);但是不用​​all()方法也可以完成同样的事情:constresult=yield[call(fetchData),put(FETCH_DATA_STARTED),];哪个更好,为什么? 最佳答案 没有功能差异,正如MateuszBurzyński(redux-s

javascript - 在没有 ES6 语法和 yield 的情况下使用 Nightmare.js

我使用nightmare.js构建了一个简单的Node脚本来抓取网站varNightmare=require('nightmare');varvo=require('vo');vo(run)(function(err,result){if(err)throwerr;});function*run(){varx=Date.now();varnightmare=Nightmare();varhtml=yieldnightmare.goto('http://google.com').evaluate(function(){returndocument.getElementsByTagName

javascript - 用 sinon stub 条纹 - 使用 stub.yields

我正在尝试stubnodejsstripeapi使用sinon,使用如下所示的测试来测试客户的创建:varsinon=require('sinon');varstripe=require('stripe');varcontroller=require('../my-controller');varstub=sinon.stub(stripe.customers,'create');stub.create.yields([null,{id:'xyz789'}]);//stub.create.yields(null,{id:'xyz789'});//sameresultwithorwith

javascript - 递归生成器函数中 yield 后的 *(星号/星号)语法是什么意思?

这个问题在这里已经有了答案:Delegatedyield(yieldstar,yield*)ingeneratorfunctions(3个答案)关闭6年前。假设我创建了一个ES6生成器function*createFibonacciIterator(a=0,b=1){yieldb;yield*createFib(b,b+a);//然后我使用该生成器获得前20个结果letfibber=createFibonacciIterator();for(letii=0;ii如果我将*留在yield*createFib(b,b+a);行中,事情就会中断,这是有道理的,因为我不想要yield一个迭代器