Tag: ecmascript 6

函数调用中的解构赋值,同时保留对象

有没有办法做下面的事情? f = (o:{a:x}) { console.log(o); console.log(x); } f({a:0}); //Should Print: //{a:0} //0 获得与此相同的结果。 f = function(o) { var {a:x} = o; console.log(o); console.log(x); } f({a:0}); //Prints //{a:0} //0 我想在parsing函数参数中的对象的同时也将对象传递给函数,以便对象可以被修改。

从发生器迁移到asynchronous/等待

我刚刚来到痛苦的认识,发电机function不能用于等待。 只承诺或asynchronousfunction。 我的团队使用由发生器函数组成的所有模块构build了一个完整的应用程序,并从主js文件调用Co模块。 除了通过数百个生成器函数并将它们从function*(…){改为async function(…){ ,还有什么可以使生成器与asynchronous/等待一起工作呢? 没有任何意义,因为yield * / generator和async / await在处理stream程方面非常相似,所以我想知道他们是如何错过了等待支持生成器的。

为什么不能stream行的JavaScript运行时处理同步的asynchronous脚本?

正如牛仔在这里的评论中所说的 ,我们都希望“用类似于这样的风格编写[非阻塞JavaScript]asynchronous代码: try { var foo = getSomething(); // async call that would normally block var bar = doSomething(foo); console.log(bar); } catch (error) { console.error(error); } “ 所以人们已经想出了解决这个问题的方法 callback库(例如asynchronous ) 许诺 事件模式 精简 域和 发电机 。 但是这些都不会像上面的同步代码那样简单易懂。 那么为什么JavaScript编译器/解释器不能阻止我们当前所知的“阻塞”语句呢? 那么,为什么JavaScript编译器/解释器不能处理上面的同步语法,如果我们把它写成asynchronous样式? 例如,在处理上面的getSomething() ,编译器/解释器可能只是说“这个语句是对[文件系统/networking资源/ …]的调用,所以我会记getSomething()听从那个调用的响应并在此同时继续我的事件循环“。 当调用返回时,执行可以继续执行doSomething() 。 您仍然会保留stream行的JavaScript运行时环境的所有基本function 单线程 事件循环 阻塞操作(I / O,networking,等待定时器)“asynchronous”处理 这只是对语法的一种调整,只要IT检测到一个asynchronous操作,解释器就可以暂停执行任何给定的代码,而不需要callback,代码只是在asynchronous调用后继续执行回报。 正如杰里米所说 JavaScript运行时没有任何事情会抢先暂停给定任务的执行,允许其他代码执行一段时间,然后恢复原来的任务 为什么不? (如在“为什么不能存在?”我对历史课不感兴趣) […]

如何检查一个variables是否是一个生成器函数? (例如函数*收益率)

什么是一个可靠的方法来检查一个函数是否是一个生成器,例如: let fn = function* () { yield 100; } if (fn instanceof ??) { for (let value in fn()) { … } } 我能想到的唯一方法是fn.toString().startsWith('function*')但这是非常hacky和不可靠 上下文:nodejs 4+

使用没有ES6语法和良率的Nightmare.js

我使用nightmare.js构build了一个简单的节点脚本来抓取网站 var Nightmare = require('nightmare'); var vo = require('vo'); vo(run)(function(err, result) { if (err) throw err; }); function *run() { var x = Date.now(); var nightmare = Nightmare(); var html = yield nightmare .goto('http://google.com') .evaluate(function() { return document.getElementsByTagName('html')[0].innerHTML; }); console.log("done in " + (Date.now()-x) + "ms"); console.log("result", html); yield nightmare.end(); } 我想在一个使用较旧版本的节点的环境中运行这个不支持ES6function的节点。 在github页面上没有关于如何做这个没有“yield”关键字的例子。 我在这里find了一个没有使用ES6语法的用法示例: 带有噩梦的网页浏览 […]

Promise.all安装在babel ES6的实现中

我使用babel来传递我的node.js@0.10.x代码,而且我被承诺所困。 我需要allSettled可以在q和bluebird或allSettled使用的allSettledfunction。 在巴贝尔的核心js的Promise ,没有allSettled方法。 目前我使用q.allSettled作为解决方法: import { allSettled } from 'q'; 在babel polyfill中是否有这样的东西? 或者,这是一个很好的algorithm,我尝试实现?

Babel 6 CLI:意外的令牌导出?

我试图通过它的CLI使用babel-node运行Babel,但我不断收到Unexpected token export错误。 我明白巴别塔6是关于插件,我需要通过.babelrc设置插件,但它似乎不能正常工作。 所以这是我的问题: 我应该使用syntax-export-extensions插件吗? 我也尝试使用替代方法, 通过package.json设置插件,但仍然没有运气。 另外,Babel 6的CLI是否有全局的.babelrc选项? 如果我必须为每个需要它的项目安装插件,这似乎很乏味… 对于那些对我想出口的东西感到好奇的人,那么这里就是这个class级: 'use strict'; class Factorial { static solve (num) { if(num === 0) return 1; else return num * Factorial.solve(num – 1); } } console.log(Factorial.solve(5)) export default Factorial;

如何在javascript / nodejs中创build静态函数/对象(ES6)

我想用Javascript / Node JS创build一个静态类。 我用谷歌,但我找不到任何有用的例子。 我想在Javascript ES6中创build这样的东西(C#): public static MyStaticClass { public static void someMethod() { //do stuff here } } 现在,我有这个类,但是我认为这个代码每次从“require”调用时都会创build一个新的实例。 function MyStaticClass() { let someMethod = () => { //do some stuff } } var myInstance = new MyStaticClass(); module.exports = factory;

了解具有fs模块的Node JS生成器

我一直对Node JS非常兴奋。 我终于决定closures并编写一个testing项目,以了解Node最新的Harmony构build中的生成器。 这是我非常简单的testing项目: https://github.com/kirkouimet/project-node 要运行我的testing项目,您可以轻松地从Github中提取文件,然后运行它: node –harmony App.js 这是我的问题 – 我似乎无法让节点的asynchronousfs.readdir方法与内置的生成器运行。 其他项目,如银河和暂停似乎能够做到这一点。 这是我需要修复的代码块。 我想能够实例化FileSystemtypes的对象并调用其上的.list()方法: https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/FileSystem.js#L7-L11 FileSystem = Class.extend({ construct: function() { this.currentDirectory = null; }, list: function*(path) { var list = yield NodeFileSystem.readdir(path); return list; } }); 我需要提前做些什么来将节点的fs.readdir转换成一个生成器? 一个重要的注意事项是,我正在parsing创build的所有类函数。 这使我可以处理发电机的function,而不像普通的function https://github.com/kirkouimet/project-node/blob/4c77294f42da9e078775bb84c763d4c60f21e1cc/Class.js#L31-L51 这个项目我一直很难过。 会爱任何援助! 这是我想要完成的: 大量使用带有inheritance的John Resig的JavaScript Class支持修改版本的类 使用生成器获得对Node的asynchronous调用的内联支持 编辑 我试图实现你的例子function,我遇到了一些麻烦。 list: function*(path) { var […]

像维基百科上所说的那样实现LLLalgorithm,但却陷入严重的问题

我不确定我的问题与编程有关,或与LLLalgorithm的概念有关,以及维基百科上提及的内容。 我决定实施LLLalgorithm,因为它已经写在维基百科上 (逐行/逐行)实际学习algorithm,并确保它是真正的工作,但我得到意想不到或无效的结果。 所以,我使用JavaScript(编程语言)和node.js(JavaScript引擎)来实现它, 这是获取完整代码的git存储库 。 长话短说,K的值超出范围,例如当我们只有3个向量(数组大小为3,因此索引的最大值将是2)时,K的值将超出范围,但是k变为3并且是无意义的。 我的代码是维基百科上提到的algorithm的一步一步(逐行)实现,我所做的只是实现它。 所以我不是什么问题。 // ** important // {b} set of vectors are denoted by this.matrix_before // {b*} set of vectors are denoted by this.matrix_after calculate_LLL() { this.matrix_after = new gs(this.matrix_before, false).matrix; // initialize after vectors: perform Gram-Schmidt, but do not normalize var flag = false; // invariant var k […]