2015-02-09 10 views
21

Próbuje użyć nowego ES6 oparciu node.js ODM dla Mongo (Robe http://hiddentao.github.io/robe/)nieoczekiwany tryb ścisły słowo zarezerwowane - plon? v0.11 węzeł, harmonia, ES6

Pierwsze "nieoczekiwany sposób ścisły zastrzeżone słowo" błędzie. Czy ja tu coś nie rozumiem?

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'); 

Run to:

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 

Odpowiedz

21

Jeśli chcesz użyć generators zrobić asynchronicznej operacji w sposób synchroniczny musisz zrobić to podoba:

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'); 
})(); 

gdzie co realizacja można znaleźć w:

i tak dalej.

W strict mode nie można używać yield poza generatorami. W non-strict mode poza generatory yield będą traktowane jako identyfikator zmiennej - tak w twoim przypadku i tak będzie to powodować błąd.

+0

Awesome. Dziękuję, Alex, Trochę dla mnie martwym momentem. Ma sens. 1.) Trzeba rzeczywiście uzyskać od wewnątrz coś możliwego do wykonania (tj. Generator 2.) Użyj wspomnianego generatora w coś, co może wykonać go dla ciebie w sposób przezroczysty (co, Task.js itp.) –

1

Na uwagę zasługują również ... nowe wersje obietnic zwrotu/użytkowania, a nie thunks. Tak właśnie działało z nowszymi wersjami współpracy.

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); 
}); 
Powiązane problemy