标签: ecmascript-harmony

ES7使用await生成器从一组promise中获取结果

鉴于一系列承诺,在ES7中获得结果的惯用方法是什么?

这就是我想要做的事情:

async function getImports() {
  let imports = [System.import('./package1.js'), System.import('./package2.js')];
  let promises = await* imports;
  let results = [];
  await promises.forEach(val => val.then(data => results.push(data))); //seems hacky
  console.log(results); // array of 2 resolved imports
}
Run Code Online (Sandbox Code Playgroud)

结果是正确的,但我仍然在做a forEach和a then将已解决的承诺转化为结果.这对我来说似乎不对.有更干净的方式吗?

javascript ecmascript-harmony ecmascript-6 ecmascript-7

26
推荐指数
1
解决办法
1万
查看次数

转换Singleton JS对象以使用ES6类

我使用ES6每个我的文章的WebPack ES6-transpiler这里:http://www.railsonmaui.com/blog/2014/10/02/integrating-webpack-and-the-es6-transpiler-into-an-现有的护栏项目/

将两个Singleton对象转换为使用ES6类是否有意义?

import { CHANGE_EVENT } from "../constants/Constants";

var EventEmitter = require('events').EventEmitter;
var merge = require('react/lib/merge');

var _flash = null;

var BaseStore = merge(EventEmitter.prototype, {

  emitChange: function() {
    this.emit(CHANGE_EVENT);
  },

  /**
   * @param {function} callback
   */
  addChangeListener: function(callback) {
    this.on(CHANGE_EVENT, callback);
  },

  /**
   * @param {function} callback
   */
  removeChangeListener: function(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  },

  getFlash: function() {
    return _flash;
  },

  setFlash: function(flash) {
    _flash = flash;
  }
});

export { BaseStore };
Run Code Online (Sandbox Code Playgroud)

这是文件ManagerProducts.jsx,它有一个应该从BaseStore扩展的单例.

/**
 * Client side store …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-harmony ecmascript-6

25
推荐指数
4
解决办法
4万
查看次数

意外的严格模式保留字 - 产量?节点v0.11,和谐,es6

尝试使用新的基于ES6的node.js用于Mongo的ODM(Robe http://hiddentao.github.io/robe/)

获得"意外严格模式保留字"错误.我在这里错了吗?

test0.js

"use strict";
// Random ES6 (works)
{ let a = 'I am declared inside an anonymous block'; }

var Robe = require('robe');

// :(
var db1 = yield Robe.connect('127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

运行:

C:\TestWS>node --version
v0.11.10

C:\TestWS>node --harmony test0.js

C:\TestWS\test0.js:12
var db1 = yield Robe.connect('127.0.0.1');
          ^^^^^
SyntaxError: Unexpected strict mode reserved word
    at exports.runInThisContext (vm.js:69:16)
    at Module._compile (module.js:432:25)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:349:32)
    at Function.Module._load (module.js:305:12)
    at Function.Module.runMain (module.js:490:10)
    at startup (node.js:123:16)
    at node.js:1031:3
Run Code Online (Sandbox Code Playgroud)

node.js ecmascript-harmony ecmascript-6

23
推荐指数
1
解决办法
4万
查看次数

为什么在使用模板字符串时可以在没有括号的情况下调用函数?

我有一个简单的日志功能:

function log(str) {
  console.log('logged: ', str);
}
Run Code Online (Sandbox Code Playgroud)

如果我在没有括号的情况下调用它(目前使用Chrome的开发工具)并传入模板字符串,如下所示:

log`foo`
Run Code Online (Sandbox Code Playgroud)

输出是: logged: ["foo", raw: Array[1]]

如果我用括号称呼它,

log(`foo`)
Run Code Online (Sandbox Code Playgroud)

输出是: logged: foo

为什么在Javascript中使用模板字符串调用函数没有括号?发生了什么导致结果与用括号调用结果不同?

javascript ecmascript-harmony ecmascript-6 template-strings ecmascript-2015

22
推荐指数
1
解决办法
2390
查看次数

在nodejs中启用Harmony Proxies

是否可以在nodejs中启用EcmaScript 6 Harmony Proxies?如果是这样,有什么优点和缺点?有没有关于如何使用它们的文档?谢谢 !

node.js ecmascript-harmony

20
推荐指数
1
解决办法
1万
查看次数

ES6什么时候可以在IE中使用?

如果您真的知道答案或可以提供一些信息,这是一个合理的问题.

Firefox和Chrome一直致力于包含ES Harmony中的许多功能......

我的问题实际上是两个部分:

  1. 有谁知道ES6何时会暂时定稿?
  2. Internet Explorer支持这些功能之前需要多长时间?我假设它将是IE11.IE11有预计的发布日期吗?

javascript ecmascript-harmony

18
推荐指数
1
解决办法
1万
查看次数

JavaScript ES6:测试箭头功能,内置函数,常规函数?

除了常规功能内置功能之外,还有一种优雅的方式可以告诉Harmony的纤细箭头功能吗?

和谐维基指出:

箭头函数就像内置函数一样缺乏.prototype和任何[[Construct]]内部方法.所以new(()=> {})抛出一个TypeError,否则箭头就像函数一样

这意味着,您可以测试箭头功能,如:

!(()=>{}).hasOwnProperty("prototype") // true
!(function(){}).hasOwnProperty("prototype") // false
Run Code Online (Sandbox Code Playgroud)

但是测试也将返回true任何内置函数,例如setTimeoutMath.min.

如果您获得源代码并检查它是否可以在Firefox中运行"native code",但它看起来不太可靠也不可移植(其他浏览器实现,NodeJS/iojs):

setTimeout.toSource().indexOf("[native code]") > -1
Run Code Online (Sandbox Code Playgroud)

小的GitHub项目node-is-arrow-function依赖于函数源代码的RegExp检查,这不是那么整洁.

编辑:我尝试了一下JavaScript解析器橡子,看起来工作得很好 - 即使它太过分了.

acorn = require("./acorn");

function fn_sample(a,b){
    c = (d,e) => d-e;
    f = c(--a, b) * (b, a);
    return f;
}

function test(fn){
    fn = fn || fn_sample;
    try {
        acorn.parse("(" + fn.toString() + ")", {
            ecmaVersion: 6,
            onToken: function(token){ …
Run Code Online (Sandbox Code Playgroud)

javascript function ecmascript-harmony ecmascript-6 arrow-functions

18
推荐指数
3
解决办法
4390
查看次数

使用生成器处理异常

最近生成器在NodeJS中启动,我可以做类似的事情:

Promise.coroutine(function *(query){
    var handle = yield db.connect(Settings.connectionString); //async, returns promise
    var result = yield db.query(query); // async, returns promise
    return result;
});
Run Code Online (Sandbox Code Playgroud)

现在生成器非常棒,因为它们让我在JS中执行async/await.我真的很想能够做到这一点.

但是,出现了一个问题.生成器使用try/catch块,所以假设我的代码如下所示:

Promise.coroutine(function *(){
    try{
        var db = yield DBEngine.open("northwind"); // returns promise
        var result = yield db.query("SELECT name FROM users"); // returns promise
        return res;
    } catch (e){
        //code to handle exception in DB query
    }
});
Run Code Online (Sandbox Code Playgroud)

(注意,Promise.coroutine来自蓝鸟)

注意这个bug?但是有一个参考错误 - 捕获会吞下它.

当我在95%的情况下放置try/catch时,我想要捕获的是逻辑错误和I/O错误,而不是语法或类型错误.我想要非常清楚这些.回调使用err第一个参数,在生成器中,我不确定替换是什么.

如何在JavaScript中处理生成器代码中的异常处理?

一个好的解决方案可以让我保持堆栈跟踪.

javascript generator ecmascript-harmony

16
推荐指数
1
解决办法
3709
查看次数

使用WeakMaps在Javascript中创建常规弱引用

我试图用WeakMaps 做明显的事情:我想创建一个弱引用.特别是,我想要一个没有该列表影响监听器生命的事件监听器列表.

所以我很高兴能找到WeakMaps,直到我看到它们只是为了满足一个(相当罕见的)用例,扩展其他密封的对象.当我想要这样做时,我想不到,但我一直都需要听众列表.

这有可能以一些我没有想到的聪明方式使用WeakMaps吗?

javascript weak-references ecmascript-harmony weakmap ecmascript-6

16
推荐指数
1
解决办法
1122
查看次数

node.js/ES6 /类创建:SyntaxError:意外的保留字

我尝试在我的node.js/express app上创建一个类.

它适用于基本的js/prototype模式,例如:

function MyClass() { 
    /* constructor code */
};

MyClass.prototype.myMethod = function() {
    /* method code */
};

module.exports = MyClass;
Run Code Online (Sandbox Code Playgroud)

但我想使用class,constructor,extends,...关键字.

我试过了:

class MyClass {
    constructor() {
        /* constructor code */
    }

    myMethod() {
        /* method code */
    }

}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,错误是:

class MyClass {
^^^^^
SyntaxError: Unexpected reserved word
Run Code Online (Sandbox Code Playgroud)

我的命令行用于启动具有所有和声选项的应用程序:

node `node --v8-options | grep harmony | cut -d ' ' -f | xargs` my-app.js 
Run Code Online (Sandbox Code Playgroud)

想要正确启动我的应用程序的想法吗?

javascript node.js express ecmascript-harmony ecmascript-6

15
推荐指数
2
解决办法
2万
查看次数