尝试为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
答案 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);
});