hasil kata cadangan mode ketat yang tidak terduga? Node v0.11, harmoni, es6

Mencoba menggunakan ODM node.js berbasis ES6 baru untuk Mongo (Robe http://hiddentao.github.io/robe/)

Mendapatkan kesalahan "kata cadangan mode ketat yang tidak terduga". Apakah aku ada yang salah di sini?

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

Menjalankannya:

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

person Robert Taylor    schedule 09.02.2015    source sumber


Jawaban (2)


Jika Anda ingin menggunakan generator untuk melakukan operasi asinkron secara sinkron Anda harus melakukannya seperti:

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

dimana co realisasinya dapat anda temukan di:

dan seterusnya.

Di strict mode Anda tidak dapat menggunakan yield di luar generator. Di non-strict mode di luar generator, yield akan dianggap sebagai pengidentifikasi variabel - jadi dalam kasus Anda, ini akan tetap menimbulkan kesalahan.

person alexpods    schedule 09.02.2015
comment
Luar biasa. Terima kasih, Alex, Ini momen yang mematikan otakku. Masuk akal. 1.) Harus benar-benar menghasilkan dari dalam sesuatu yang dapat dihasilkan (yaitu generator 2.) Gunakan generator tersebut dalam sesuatu yang dapat mengeksekusinya untuk Anda secara transparan (co, Task.js, dll) - person Robert Taylor; 10.02.2015

Juga patut diperhatikan... versi baru dari janji pengembalian/penggunaan bersama, bukan terima kasih. Jadi inilah yang berhasil dengan versi co yang lebih baru.

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);
});
person Robert Taylor    schedule 10.02.2015