Articles of ecmascript 7

如何使用babel为我的js服务模块实现已validation的es 7装饰器

我在装饰阶段使用babel:0在我的stream量通量js项目的支持,我想使用我的服务API模块validation装饰检查有效的用户会话。 谷歌search,似乎有几个职位,解释不同的变化,但无法find一个权威的文档或指导。 这是我到目前为止所尝试的,我知道我的authentication函数的参数是不正确的,不知道是否需要为我的模块实现一个类,而不是只使用exports对象。 我无法find文档的部分是如何实现装饰器本身 – 在这种情况下,装饰函数将接收并检查它的req参数。 // how do I change this method so that it can be implemented as a decorator function checkAuthenticated(req) { if (!req.session || !req.session.username) { throw new Error('unauthenticated'); } } module.exports = { @checkAuthenticated read: function(req, resource, params, serviceConfig, callback) { //@authenticated decorator should allow me to move this out […]

带有promise / async-await的callback上下文

我正在尝试使用ES7的asynchronous等待function,以避免在我的一些代码中的callback地狱。 我正在使用SQLite,我需要在callback的上下文中访问一个variables。 为了说明,这里是从sqlite3 npm模块: module.exports = function() { db.run("INSERT INTO foo …", function(err) { // err is null if insertion was successful console.log("inserted id:", this.lastID); }); }; 假设我创build了一个承诺运行上面的代码,我怎样才能访问this.lastID与asynchronous等待function? module.exports = async function() { try { await db.run("INSERT INTO foo …"); // How can I access the `this` context? } catch (err) { } };

JavaScript:函数执行的顺序

我正在学习JavaScript,但是有很多我无法理解的东西。 在一个在线JavaScript测验中,出现了以下问题: 以下JavaScript代码将login到控制台: const a = {}; const b = () => aa = () => {}; const c = c => '' + c + aa(b()); const d = console.log.bind(console); const e = (e => () => d(c(e++)))(0); try{ e(); }catch(a){ e(); } 我花了一些时间去了解每个variables(这里是常量)的含义。 我开始分析e()里面的try代码块的代码。 所以, e表示闭包,这意味着函数d将被调用参数c(0) , e将变成1 。 据我了解,这里d基本上代表了console.log函数(但我不明白为什么他们使用bind ?)。 现在,我知道,第一个将被执行c(0) ,然后结果控制台,对不对? […]

JavaScript – 如何列出对象的属性?

有没有办法列出一个对象(甚至可能是一个函数)的所有属性,包括不可枚举的,但不使用Object.getOwnPropertyNames或Object其他方法? 所以,例如,我需要获取本地String构造函数( fromCharCode , fromCodePoint , raw等)的所有属性,但是我不允许使用来自Object本地函数getOwnPropertyNames 。 有没有办法做到这一点? 我试过for..in和for..of循环,但不是所有的属性都列出。 另外,我已经尝试了Object.keys ,但是又一次,并没有列出所有的属性。 另外,要清楚我要求的是什么:以下是不允许的: var a = Object.getOwnPropertyNames.bind(Object); console.log(a(String)); 我在问这个,因为我正在玩一些游戏(称为ElevatorJS ),用户在这里写一个JavaScript程序,在受限制的条件下实现某些function。 在这个特定的条件下, getOwnPropertyNames方法被重写并且等于null ,所以我们不允许使用它。 但是,事实certificate,他们已经隐藏了一些非可枚举的属性在String构造函数中作为一个属性,所以我必须以某种方式访问​​它。 另外,它们也覆盖了Object其他方法(如entries , getOwnPropertyDescriptors等)。 有没有办法做到这一点? 先谢谢你。

JavaScript – 缺less语法错误

我偶然发现了这个奇怪的东西。 我在GitHub上写了一些问题,如你所知,在GitHub文章中使用某些语言突出显示,你应该把它封装在tripple 重音 。 例如,如果你想使用JavaScript,你应该这样做: “`JavaScript // Your code “` 它将在您的代码片段中使用JavaScript突出显示。 然而,当我在那里写一篇文章时,我不小心复制了从编辑模式(包括严重口音)剪切的整个代码,并将其粘贴到js文件中。 不过,我忘了删除重音符号。 这是我在js文件中的代码: function test(){ “`JavaScript console.log(1); “` } 当然,这应该是语法错误。 但是,令我惊讶的是,Node.js编译没有任何错误。 我无法相信。 没有cyntax错误。 这怎么可能? 所以,我认为tripple重音在JavaScript中有特殊的含义(也许像Python中的多行string?)。 我在互联网search,但我什么也没find。 为什么EcmaScript允许这样做? 它是什么样的用法呢?

function类似Promise.some /任何未知数量的承诺

我正在node.js(V8.1.3)中创build一个脚本,它查看来自多个API的类似JSON数据并比较这些值。 更确切地说,我正在研究不同股票(实际上是encryption货币)的不同市场价格。 目前,我正在使用promise.all来等待来自各个API的所有响应。 let fetchedJSON = await Promise.all([getJSON(settings1), getJSON(settings2), getJSON(settings3) … ]); 然而,Promise.all抛出一个错误,如果只是一个承诺拒绝一个错误。 在蓝鸟docos有一个叫做Promise.some的函数,它几乎是我想要的。 据我所知,这需要一系列的承诺,并解决两个最快的承诺解决,否则(如果less于2个承诺解决)会引发错误。 问题在于,首先,我不希望最快的两个承诺解决了它返回的问题, 我希望任何成功的承诺被返回 ,只要有超过2个。这似乎是什么Promise.any除了最小计数为1(我要求最小计数为2) 其次,我不知道我会等待多less承诺(换句话说, 我不知道有多lessAPI将要求数据 )。 它可能只有2个,也可能是30个。这取决于用户的input。 目前写这个在我看来,可能只是一个方法来有一个承诺。任何2计数,这将是最简单的解决scheme。 这可能吗? 顺便说一句,不知道标题是否真的总结了这个问题。 请build议标题的编辑:) 编辑:我可能会写脚本的另一种方式是,前两个API加载开始得到计算,并推送到浏览器,然后每个下一个JSON加载和计算后。 这样我就不用等待所有的承诺,在我开始计算数据并将结果传递给前端之前,就完成了。 这可能与一个函数也适用于其他情况? 我的意思是这样的: 并行请求JSON … | —– JSON1 —— | | — JSON-失败— | > catch错误>做一些错误。 不影响下一个结果。 | ——- ——- JSON2 | >满足最低2个结果>计算JSON>到浏览器。 | ——- JSON3 ——— | […]

巴贝尔可以编译为“node –harmony”而不是ES5吗?

我试图编译一个Koa应用程序,而Koa有断言来检查以确保我作为中间件传递了生成器函数。 不过,我想使用Babel来编译ES7的服务器端代码,以便与前端代码保持一致。 是否有可能针对节点和谐,而不是ES5? 在选项中我没有看到任何有希望的东西,但select一个目标似乎是一个标准的东西,可以用编译器来做。 更新 黑名单Babel的再生变换似乎没有效果,即使我正在使用stage: 1 。 index.js: require( "babel/register" )({ sourceMaps: "inline", stage: 1, blacklist: [ "regenerator" ], optional: [ "asyncToGenerator" ] }); var app = require( "./src/server" ); app.listen( process.env.port || 3000 ); SRC / server.js: import koa from "koa"; import router from "koa-router"; router.get( "/", function *( next ) { this.body […]

ES7asynchronous/等待概念问题

我正在迁移一个现有的程序来使用async / await (通过Babel的bluebirdCoroutines )来学习这种风格。 我一直在看这个教程 。 我有点困扰以下的行为。 这段代码按预期工作: let parts = []; let urlsP = urls.map((url, index) => { return dlPart(url, index, tempDir); }); for (let urlP of urlsP) { // Parallel (yay!) parts.push(await urlP); } for (let part of parts) { // Sequential await appendFile(leFile, part); } 重写如下,它仍然有效,但拳头操作不再平行(完成需要更长的时间)! let index = 0; let […]

节点在asynchronous函数完成之前退出

我有一个函数返回一个承诺,我试图从一个asynchronous函数中等待它。 问题是程序立即完成,而不是等待承诺。 asynchronoustest.js: function doItSlow() { const deferred = new Promise(); setTimeout( () => { console.log( "resolving" ); deferred.resolve(); }, 1000 ); return deferred; } async function waitForIt( done ) { console.log( "awaiting" ); await doItSlow(); console.log( "awaited" ); done(); } waitForIt(() => { console.log( "completed test" ); }); console.log( "passed by the test" ); […]

我如何在nodejs中使用ES7?

我如何在nodejs中使用ES7(ECMAScript 2016) ? 我如何在生产中使用它? 而在哪个版本的节点中,我不需要使用任何模块来做到这一点? 任何帮助表示赞赏。