Tag: ecmascript 6

如何利用JavaScript和Node.js中的事件循环?

事件循环的概念是一般还是特定于语言? 我正在寻找具体的解释与例子来清楚地理解以下内容: 1.它是如何工作的? 如何/何时应该/可以利用JavaScript中的事件循环? 在ECMAScript-6/2015中引入的有关事件循环的任何更改? 更新:没有缺乏答案,但我正在寻找一个易于理解的定义与例子。 附录: 考虑下面的代码: var list = readHugeList(); var nextListItem = function() { var item = list.pop(); if (item) { // process the list item… setTimeout( nextListItem, 0); } }; 假设setTimeout()在这里使用事件循环来防止计算器溢出是否正确? 我读了这个代码的解释: 堆栈溢出被消除,因为事件循环处理recursion,而不是调用堆栈。 更新2 在上面的代码中给出的setTimeout()的完整解释如下: 堆栈溢出被消除,因为事件循环处理recursion,而不是调用堆栈。 当nextListItem运行时,如果item不为null,则将超时函数(nextListItem)推送到事件队列中 ,并且函数退出,从而使调用堆栈清空。 当事件队列运行超时事件时 ,下一个项目被处理,一个计时器被设置为再次调用nextListItem。 因此,该方法从开始到结束处理而没有直接recursion调用,因此无论迭代次数如何, 调用栈都保持清晰 。 上述解释中的矛盾和答案使这一切更加难以理解。

巴别似乎没有工作

我有一个项目内置WebStorm 2016.2.2,Node.js 6.6.0和TypeScript 1.8。 由于某些原因,在这里指定: Node.js不支持ES6导入和导出 ,我需要使用Babel。 我已经安装了Babel和babel-preset-es2015,并添加了一个文件监视器,但是我仍然收到“意外令牌导入”错误。 它看起来像巴贝尔不起作用。 1)我需要采取额外的行动,以便将我的js文件转换为ES5吗? 2)我应该在“WebStorm设置”中将“JavaScript语言版本”设置为什么版本? 3)Babel是否应该像TypeScript编译器那样用输出生成另一个文件? 任何帮助将深深感激!

在每个对象的调用中使用相同的function

我反对js var myobj = {} 我需要每次你调用方法像myObj.a()或myObj.b()等方法,它会调用相同的function ,不会调用任何其他的东西… … like myFn = function(){ return 1 + 1 ; }

如何运行nodejs应用程序作为永远或新贵的服务?

我正在运行我的应用程序如下 NODE_ENV=production node_modules/.bin/babel-node –presets 'react,es2015' src/server.js 如何把它作为永远或新贵的服务来运行?

如何从外部函数访问数组?

我是新来的asynchronous编程 function loadPlugin(plugins, callback) { let tests = [[], [], []]; plugins.forEach((plugin) => { f.isPlugin(plugin, (exists) => { if (exists) { if (!f.pluginIsLoaded(plugin)) { tests[0].push(plugin); f.loadPlugin(plugin); } else { tests[1].push(plugin); } } else { tests[2].push(plugin); } }); console.log(tests); }); return tests; } 和 module.exports.isPlugin = (plugin , callback) => { fs.access(`./plugins/${plugin}`, fs.constants.F_OK, (err) => { […]

如何在Javascript中修改一个属性的属性

我是新来的node.js,但写了多年的Javascript,我偶然发现一个模式,我不明白:一个Flag sets a modifier对象sets a modifier 。 例如这里socket.io文档 : 标志:“广播” 为后续事件发射设置一个修饰符,事件数据只会发送给发送者的每个套接字。 var io = require('socket.io')(); io.on('connection', function(socket){ socket.broadcast.emit('an event', { some: 'data' }); // everyone gets it but the sender }); 这里的socket是一个对象, broadcast是该对象的属性,而socket.broadcast是一个修饰符集相同的对象?! 如何访问一个objet的属性返回对象本身? 这是Javascript的function,我忽略了多年? 或者,这是我不知道的ES6的一些新function? 或者这是一个特定于节点的编码模式? 它是如何工作/实现的? 编辑:即使另一个问题是关于在文档中相同的exerpt,它是非常不同的。 我的问题是关于Javascript的背景,而另一个是关于文档中的措辞。 这个原因的答案也是非常不同的。

JavaScript:提升let,const的区别?

背景 我有一个负责生成一个随机数并使其可用的函数。 "use strict"; module.exports = function(args) { let { min, max, } = args; let currNumber = genRandom(min, max); const genRandom = (min, max) => Math.floor(Math.random() * max) + min; const getNumber = () => currNumber; return Object.freeze({ getNumber }); }; 问题 由于我不明白的原因,当我运行这个代码与Node.js 7.8,我得到的genRandom is not defined的错误。 但是,如果我改变了代码: let currNumber = genRandom(min, max); const […]

ES6 Dyanmic Promise从arrays链接

脚本 我有一个我需要下载的URL数组,但每个都必须提供唯一的事务ID,必须从服务器请求,并且只有在请求成功时才会增加。 问题 当我循环访问数组时,我需要等待事务ID的请求和文件的请求,然后开始下一个迭代循环,但是文件的数量不是固定的,所以需要dynamic地构build一个链承诺。 伪代码 下面是一些伪代码,getFiles()是问题,因为所有的请求获得相同的事务ID,因为他们不等待前一个请求完成。 function getTransationId(){ return new Promise((resolve,reject)=> { let id = getNextTransactionId(); if(id!=error){ resolve(id); }else{ reject(error); } }) } function getFile(url, transactionId){ return new Promise((resolve,reject)=>{ http.request(url+transactionId, function(err,response){ if(err){ reject(err); }else{ resolve(response); } }); }); } function getFilesFromArray(urlArray){ for(let url of urlArray){ getTransactionId().then(resolve=>getFile(url,resolve),reject=>console.error(reject)); } } 题 我如何dynamic链式承诺? 回答 这是一个Ovidiu的回答JSFiddle

我如何创build一个像钻石一样的js承诺链

我坚持承诺。 说我的程序结构是这样的 Func A //gets data then passes to I1 and J2 / \ Func I1 Func J1 //then route I & J run without interaction | | Func I2 Func J2 \ / Func B //Func B gets both the result of both 我有一些麻烦得到这个工作。 我就是这样 getdata.then(data=>{ var methods = Promise.all([ funci1.x(data).then(output=>{ funci2.x(output) }), funcj1.x(data).then(output2=>{ […]

JavaScript更好的导入钩子,而不通过相对文件夹导航

在我的文件夹结构中编写testing时,困扰着我的是以下内容: //App meteor/imports/api/tasks.js //test meteor/test/imports/api/tasks.test.js 所以现在当我从tasks.js中导入一些东西,我import { task } from '../../../imports/api/tasks.js' ,我的文件夹结构变得比这更大。 有更好的解决scheme吗? 我正在考虑导入钩子,也许在根testing目录中,所以我可以从那里导入所有的东西,当我在testing中,我可以从导入钩子导入,而不必做所有的事情../../../../导航。