2015-02-09 8 views
21

Попытки использовать новый ES6 на основе Node.js ODM для Монго (Robe http://hiddentao.github.io/robe/)неожиданный строгий режим зарезервированное слово - выход? Узел v0.11, гармония, ES6

Получения "неожиданный строгий режим зарезервированного слова" ошибка. У меня что-то не так?

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 

ответ

21

Если вы хотите использовать 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 будет рассматриваться как идентификатор переменной - так что в вашем случае это все равно вызовет ошибку.

+0

Awesome. Спасибо, Алекс, мне кажется, что у меня мертвый момент. Имеет смысл. 1.) На самом деле нужно извлечь из чего-то доходного (т. Е. Генератора 2.) Использовать указанный генератор в том, что может выполнить его для вас прозрачно (co, Task.js и т. Д.), –

1

Также заслуживает внимания ... новые версии co return/use обещают, а не 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); 
});