web-dev-qa-db-ja.com

予期しないストリクトモード予約語-yield? Node v0.11、harmony、es6

Mongo用に新しいES6ベースのnode.js ODMを使用しようとしています(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
23
Robert Taylor

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は変数識別子と見なされます-したがって、いずれにしてもエラーがスローされます。

21
alexpods

また注目に値する... coの新しいバージョンは、サンクではなくpromiseを返します。したがって、これは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);
});
1
Robert Taylor