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

时间:2015-02-09 16:52:27

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

尝试为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

2 个答案:

答案 0 :(得分:22)

如果你想使用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 :(得分:1)

同样值得注意的是......新版本的co返回/使用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);
});