意想不到的严格模式保留字 – 屈服? 节点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 mode
, yield
将被视为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); });