Подтвердить что ты не робот

Неожиданный строгий режим зарезервированное слово - выход? 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
4b9b3361

Ответ 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);
});