【问题标题】:unexpected strict mode reserved word -- yield? Node v0.11, harmony, es6意外的严格模式保留字——yield?节点 v0.11,和谐,es6
【发布时间】:2015-04-09 11:59:30
【问题描述】:

尝试为 Mongo 使用基于 ES6 的新 node.js 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');

运行它:

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

【问题讨论】:

    标签: node.js ecmascript-6 ecmascript-harmony


    【解决方案1】:

    如果您想使用generators 以同步方式进行异步操作,您必须这样做:

    co(function*() {
        "use strict";
    
        { let a = 'I am declared inside an anonymous block'; }
    
        var Robe = require('robe');
    
        var db1 = yield Robe.connect('127.0.0.1');
    })();
    

    co的实现你可以在哪里找到:

    等等。

    strict mode 中,您不能在生成器之外使用yield。在生成器之外的 non-strict mode 中,yield 将被视为变量标识符 - 所以在你的情况下它无论如何都会抛出错误。

    【讨论】:

    • 太棒了。谢谢你,亚历克斯,对我来说,这是一个脑残的时刻。说得通。 1.) 需要从可屈服的东西中实际产生(即生成器 2.)在可以透明地为您执行它的东西中使用所述生成器(co、Task.js 等)
    【解决方案2】:

    同样值得注意...新版本的 co return/use promises 而不是 thunk。所以这就是新版本的 co 的工作原理。

    var co = require('co');
    
    co(function*() {
        "use strict";
    
        { let a = 'I am declared inside an anonymous block'; }
    
        var Robe = require('robe');
    
        var db1 = yield Robe.connect('127.0.0.1/swot');
        console.log(db1)
    
        return db1;
    
    }).then(function (value) {
        console.log(value);
    }, function (err) {
        console.error(err.stack);
    });
    

    【讨论】:

      猜你喜欢
      • 2018-03-27
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2020-04-28
      • 2020-05-29
      • 2020-11-09
      相关资源
      最近更新 更多