Tag: ecmascript 6

在使用ES6类和生成器函数时,如何避免使用`self = this`这个hack?

我试图使用明确的.bind(这),并没有工作。 我也知道箭头function不在这里工作。 'use strict'; const co = require('co'); class ServiceDemo { constructor(repository, config, loggingService) { this.config = config; this.repository = repository; this.loggingService = loggingService; } checkForNotifications(pricePoint) { const self = this; return co(function*() { self.loggingService.debug('test'); //const surprisesToNotify = yield this.getSomething(pricePoint); }); } getSomething(){ return co(function*() { return {}; }); } } module.exports = SurpriseSchedulerService;

我怎样才能parsingES6中的多行string的对象?

我正在使用Node.js v4.2.2与ES6。 我读了一个代表包含多行string的对象的文件。 我的文件如下所示: {"a":`b c`}; 我把这个文件读入一个string: var fs = require ('fs'); var my_string = fs.readFileSync(path_to_my_file).toString(); 最后,从这个string我想要获得它所表示的对象。 我能find的唯一select是使用eval: eval('my_object = ' + my_string); 有另一种方法吗? 请注意, JSON.parse(my_string)不是一个选项,因为多行string不是JSON标准的一部分。

Strava-V3和Javascript es6发生器=不兼容?

我使用node-strava-v3和Node 5.7从Strava的API中检索JSON集合。 其实很简单,实际上没有问题。 我只想借此机会尝试ES6发电机。 到目前为止,我认为我很了解这个概念。 但是在这个Node-Strava-V3 API封装的情况下,这些方法永远不会直接返回值或承诺。 只允许回叫。 这引出了我的问题:我怎样才能把ES6发电机的概念发挥出来? 拿这个:(这需要access_token你可以要求在Strava门户) var strava = require('strava-v3'); var mainActivity = {id: 504641206}; strava.activities.get(mainActivity, function (err, data){ if(err){ console.log("Strava GET issue: ", err); /// consume the JSON data here… }; //rest of the code 但我可以使用生成器暂停,直到这个“strava.activities.get()”方法结束? 这种方法不返回任何,没有价值,没有承诺。 感谢您的所有build议 缩略词

co node.js库的目的是什么?

我是node.js的新手,正在开发一个代码库,通过将调用包装到生成器函数中来利用co库。 一个简单的例子看起来像这样: module.exports.gatherData = function*() { // let img = //get the 1 pixel image from somewhere // this.type = "image/gif"; // this.body = img; co(saveData(this.query)); return; }; function *saveData(query) { if(query.sid && query.url) { // save the data } } 所以我去了github上的co主页,描述如下: “基于生成器的nod​​ejs和浏览器的控制stream程的优点,使用promise,让你以一种很好的方式编写非阻塞代码。” 在node.js的情况下,这个代码是不是也是非阻塞的? yield saveData(this.query)

express.js中间件中的空params对象

const app = express(); var router = require('express').Router({mergeParams: true}); const payloadMiddleware = (req, resp, next) => { console.log('A:',req.params); const {params, query} = req; const payload = req.body; req.my_params = { params, query, payload }; next(); }; router.use(payloadMiddleware); router.get('/inventory/:itemID/price', async function GetPrice(req, res, next) { console.log('B', req.my_params); console.log('C', req.params); } app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use('/', router); server […]

与基于ES6的多个(React)Node.JS模块导入有问题

我一直在研究一个React项目,并且遇到一个问题,试图使用ES6导入几个导出的React节点模块。 这是我的代码: 我应该可以包含hello文件夹中的AddFriendInput和FriendList ,没有任何问题。 但是当webpack / babel编译时出现这个错误: ERROR in ./src/common/containers/Menu/indexRender.js Module not found: Error: Cannot resolve 'file' or 'directory' ../../hello in /Users/markpaul/Documents/projects/patient-portal-app/src/common/containers/Menu @ ./src/common/containers/Menu/indexRender.js 122:13-35 我的AddFriendInput.js文件的内容如下所示: import React, { Component, PropTypes } from 'react'; export default class AddFriendInput extends Component { constructor(props, context) { super(props, context); this.state = { name: this.props.name || '' }; } […]

ES6中的模块模式错误(扩充)

在使用模块模式(扩充)与ES6 let关键字时出现错误。 这工作。 var Example = ( Example => { Example.name = ""; return Example; })( Example || {} ); console.log(Example); 这不是。 let Example = ( Example => { Example.name = ""; return Example; })( Example || {} ); console.log(Example); 我得到这个错误。 未捕获的ReferenceError:示例未定义 })( Example || {} ); ^^^^^^^

在React组件中使用Electron的ipcRender

我正在尝试创build一个小的React应用程序来捕获和设置一个全局快捷方式,用来显示和隐藏Electron应用程序窗口。 然而,当我试图从React组件内部使用ipcRender的时候,我就陷入了困境,引发了下面的错误。 Uncaught Error: Cannot find module "fs" 我正在使用Webpack捆绑我的JS,并编译JSX和ES6语法来导入Electron和ipcRender ,如下面的组件代码所示。 import React from "react"; import electron, { ipcRenderer } from 'electron'; var event2string = require('key-event-to-string')({}); export default React.createClass({ getInitialState: function() { return {shortcut: this.props.globalShortcut[0]}; }, handleOnKeyDown:function(e){ e.preventDefault(); var keys = event2string(e); this.setState({shortcut:keys}); this.props.globalShortcut.splice(0, 1); this.props.globalShortcut.push(keys); }, handleOnKeyUp:function(){ this.refs.shortcutInput.value = this.state.shortcut; this.refs.shortcutInput.blur(); ipcRenderer.send('set-new-shortcut', this.props.globalShortcut); }, handleOnFocus:function(){ […]

有没有一种方法在es6inheritance自错误,并没有堆栈跟踪中的构造函数?

我试图通过扩展Error来编写一个HTTPError类: class HTTPError extends Error { constructor(codeArg, message){ let code = codeArg || 500; super(message || http.STATUS_CODES[code]); // first line in stack trace this.code = code; } } 这大部分工作正常,但是当我throw这样的错误时, super被调用的行是堆栈跟踪中的第一行(假设nodejs): > const HTTPError = require('./HTTPError') undefined > let e = new HTTPError(418) undefined > throw e Error: I'm a teapot at HTTPError (/home/pat/Scripts/js/HTTPError.js:6:6) at repl:1:9 […]

最佳实践向后兼容的es6节点库开发

在开发面向节点的JS库时,编写一个利用es6function但仍然支持不支持es6的节点的版本库的最佳做法是什么? 例如,我有一个几年前在es5中编写的开源库,但是我想升级它以使用es6。 我必须对我的用户说,如果你想使用我的图书馆,你的节点版本也必须升级? 社区首选的做法是什么?