意想不到的严格模式保留字 – 屈服? 节点v0.11,和谐,es6

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

如果你想使用生成器以同步的方式进行asynchronous操作,你必须这样做:

 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'); })(); 

您可以在以下位置find合适的实现:

  • 合作
  • Task.js
  • 蓝鸟的Promise.coroutine
  • q的产卵

等等。

strict mode您不能在生成器之外使用yield 。 在发生器之外的non-strict modeyield将被视为variables标识符 – 所以在你的情况下,它会抛出一个错误。

另外值得注意的是,新版本的co返回/使用承诺,而不是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); });