Неожиданный строгий режим зарезервированное слово - выход? Node v0.11, гармония, es6
Попытка использовать новый ODM для w630 > .js на базе ES6 для Mongo (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
Ответы
Ответ 1
Если вы хотите использовать генераторы для синхронного выполнения асинхронной работы, вы должны сделать это так:
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
будет рассматриваться как идентификатор переменной - так что в вашем случае это все равно вызовет ошибку.
Ответ 2
Также заслуживает внимания... новые версии co return/use promises, а не thunks. Таким образом, это то, что работало с более новыми версиями 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);
});