2015-02-09 5 views
21

Der Versuch, eine neue ES6 node.js ODM Basis zu verwenden, für Mongo (Robe http://hiddentao.github.io/robe/)unerwarteter strikter Modus reserviertes Wort - Ausbeute? Knoten v0.11, Harmonie, es6

"unerwartet strengen Modus reservierte Wort" Fehler. Habe ich hier etwas falsch gemacht?

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 it:

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 

Antwort

21

Wenn Sie generators zu tun asynchronen Betrieb in synchroner Weise verwenden möchten Sie es mögen tun müssen:

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

wo co Realisierung finden Sie in:

und so weiter.

In strict mode können Sie yield nicht außerhalb der Generatoren verwenden. In non-strict mode außerhalb der Generatoren yield wird als variable Kennung betrachtet - so in Ihrem Fall wird es trotzdem einen Fehler werfen.

+0

Ehrfürchtig. Danke, Alex, ein bisschen hirntoter Moment für mich. Macht Sinn. 1.) Notwendigkeit, tatsächlich von etwas Nachgiebigem nachzugeben (d. H. Ein Generator 2.) Verwenden Sie den Generator in etwas, das es für Sie transparent ausführen kann (co, Task.js etc) –

1

Auch beachtenswert ... neue Versionen von Co Return/Verwendung verspricht eher als Thunks. So hat das mit neueren Versionen von co funktioniert.

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