标签: ecmascript-harmony

ECMAScript 6 和 ECMAScript Harmony 有什么区别?

有一段时间我认为它们是同一回事,但我经常在博客或此处的答案中看到措辞,似乎暗示两者之间存在差异。即使 SO 有两个不同的标签,但它们的描述没有显示出任何明显的区别。

我四处搜索了一下,这只会增加混乱,因为似乎我不是唯一不确定什么是什么意思的人。这两个术语是否有官方定义,也许是由 Ecma International 自己定义的?如果没有,是否至少有一个普遍接受的定义?

javascript ecmascript-harmony ecmascript-6

5
推荐指数
1
解决办法
1596
查看次数

节点无法启用和声功能

尝试运行这些新功能,如http://h3manth.com/new/blog/2013/es6-on-nodejs/所示,特别是本地节点环境中的Generators.我node --harmony --use-strict es6.js在0.11.4之前运行任何Node版本的任何原因我得到了错误

function *Counter() {
     ^
SyntaxError: Unexpected token *
etc...
Run Code Online (Sandbox Code Playgroud)

它适用于0.11.4及之后的任何版本,但是当--debug-brk我在那里添加一个语句时

global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
                       ^
ReferenceError: break_point is not defined
Run Code Online (Sandbox Code Playgroud)

不知道为什么它给了我启用和声的选项,但没有在以前的版本中使用它,为什么我不能调试更高版本?

node.js ecmascript-harmony ecmascript-6

5
推荐指数
1
解决办法
900
查看次数

JavaScript 原生 Promise() 不带回调

看看这个 jQuery 代码:

var promise = new Deferred(),
    some;

some = function(promise) {
    // do cool things

    promise.resolve();
};

promise.then(/*  callback cool things   */);

// init everything
some(promise);
Run Code Online (Sandbox Code Playgroud)

我不确定这种方法的架构正确性,但我使用它很长时间并且对我来说很方便。

在原生 JavaScript 中我不能使用这种方法。构造函数new Promise()需要回调参数,因此我无法将实例Promise作为参数传递。

所以我的问题是:如何预定义 JavaScript 原生 Promise,将其作为参数传递给函数和解析?

javascript jquery design-patterns promise ecmascript-harmony

5
推荐指数
1
解决办法
2570
查看次数

有没有办法在aws lambda函数中运行es6组件,特别是promises和generator

ES6用法需要--harmony节点v0.12.3中的标志.

有没有办法为aws lambda函数这样做?

ecmascript-harmony ecmascript-6 aws-lambda

5
推荐指数
1
解决办法
2265
查看次数

Google Chrome中未定义Map()

我一直在寻找答案,但我只得到有关Google Maps API的结果.我正在尝试使用JavaScript中的地图将整数映射到字符串.在Firefox中一切正常,但在Chrome中我在控制台中收到错误消息:

未捕获的ReferenceError:未定义Map

下面是一段参考代码:

var NameMap;
var DistanceMap;

function FillMaps(){
    NameMap = new Map();
    DistanceMap = new Map();

    NameMap.set(01, "Araba/Álava");
}

function CheckName(_field){
    var value = document.getElementsByName(_field.name).item(0).value;
    var location = value.charAt(0) + value.charAt(1);
    var result = NameMap.get(parseInt(location));
    if(result == undefined){
        result = "Unknown";
    }
    document.getElementById('loc').innerHTML = result;
}
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome map ecmascript-harmony

4
推荐指数
2
解决办法
9928
查看次数

任何人都可以在他们的Node.js REPL上使用let语句吗?

可能吗?它似乎不适用于我的REPL,无论是否有--harmony.

我真正想做的是使用for..of循环,但是让问题解决似乎更简单,可能是同样的原因.

有谁知道这些的状态?

javascript node.js ecmascript-harmony

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

notifier.performChange实际上做了什么?

我想了解Object.getNotifier(object).performChange.从概念上讲,我理解它是为定义"宏"或更高级别的更改而设计的.从示例中,每个人似乎都参考:

increment: function(amount) {
  var notifier = Object.getNotifier(this);

  notifier.performChange(Thingy.INCREMENT, function() {
    this.a += amount;
    this.b += amount;
  }, this);

  notifier.notify({
    object: this,
    type: Thingy.INCREMENT,
    incremented: amount
  });
}
Run Code Online (Sandbox Code Playgroud)

我不明白的是,这与简单地执行notifier.performChange直接传递的匿名函数有什么不同,而不是作为回调?换句话说,它与以下内容有何不同:

increment: function(amount) {
  var notifier = Object.getNotifier(this);

  this.a += amount;
  this.b += amount;

  notifier.notify({
    object: this,
    type: Thingy.INCREMENT,
    incremented: amount
  });
}
Run Code Online (Sandbox Code Playgroud)

我已经看到,在最新的规范中,notifier.performChange可能会返回一个对象,然后将其作为通知发布,如:

notifier.performChange(Thing.INCREMENT, function() {
    this.a += amount;
    this.b += amount;

    // a notification is issues with this return value,
    // including …
Run Code Online (Sandbox Code Playgroud)

javascript ecmascript-harmony object.observe

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

ECMAScript中的对象属性常量?

我已经看到了ECMAScript Harmony的一些提议,能够用关键字指定常量const.但是,它似乎只在块范围内可用(即FunctionBodyProgram).有没有办法将常量定义为对象属性(想象myObj.STATUS_OK)?

我猜建议的方法是使用propertiesvia Object.definePropert(y/ies),但这似乎不太方便,现在是吗?

javascript const constants ecmascript-harmony

3
推荐指数
1
解决办法
1255
查看次数

从发电机调用发电机

我想从另一台发电机调用一台发电机得到它的"步骤".虽然我找不到一个好的语法.

function* test1() {
    yield 2;
    yield 3;
}
function* test2() {
    yield 1;
    for (var i of test1()) yield i; // WTF
    yield 4;
}
var a = test2();
for (var b of a) {
    console.log(b);
}
Run Code Online (Sandbox Code Playgroud)

输出:1 2 3 4

我该如何缩短那一行?

javascript yield generator ecmascript-harmony

3
推荐指数
1
解决办法
108
查看次数

承诺链接:在接下来的回调中使用先前承诺的结果

我正在使用直接的ES6 Promises(使用es6-promise polyfill库),我遇到了一个问题,即访问以前在链接中的承诺的结果.

这个问题在Angular/Q的背景下是相同的,但是我对答案不满意,并想看看是否有更好的方法:

如何访问AngularJS保证链中先前承诺的结果?

请考虑以下代码段:

Student.find().then(function(student) {
        return HelpRequest.findByStudent(student);
    }, function(error) { //... }
).then(function(helpRequest) {
    // do things with helpRequest...
    // PROBLEM: I still want access to student. How can I get access to it?
});
Run Code Online (Sandbox Code Playgroud)

在链式承诺中,我想使用student我在第一个承诺中得到的对象.但正如所写,这无法访问它.我有几个明显的选择:

  1. 将学生存储在外部范围内的变量中(yuck)
  2. 我实际上不知道这是如何工作的,但另一个问题中的解决方案表明我可以调用then结果HelpRequest.findByStudent()和调用Promise.resolve内的组合结果Student.find().then.不过,我认为以下实现不起作用.

    Student.find().then(function(student) {
            var data = {student: student};
            HelpRequest.findByStudent(student).then(function(helpRequest) {
                data.helpRequest = helpRequest;
            });
            // PROBLEM: if HelpRequest.findByStudent(student) is asynchronous, how 
            // does this get the data before returning?
            return …
    Run Code Online (Sandbox Code Playgroud)

javascript promise ecmascript-harmony ecmascript-6

3
推荐指数
1
解决办法
2839
查看次数