ให้คำสงวนโหมดเข้มงวดที่ไม่คาดคิดหรือไม่ โหนด v0.11, ความสามัคคี, es6

กำลังพยายามใช้ node.js ODM ที่ใช้ ES6 ใหม่สำหรับ Mongo (Robe http://hiddentao.github.io/robe/)

ได้รับข้อผิดพลาด "คำสงวนโหมดเข้มงวดที่ไม่คาดคิด" ฉันทำอะไรผิดที่นี่หรือเปล่า?

ทดสอบ0.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

person Robert Taylor    schedule 09.02.2015    source แหล่งที่มา


คำตอบ (2)


หากคุณต้องการใช้ เครื่องกำเนิดไฟฟ้า เพื่อดำเนินการแบบอะซิงโครนัสในลักษณะซิงโครนัส คุณต้องทำมันเหมือน:

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 จะถือเป็นตัวระบุตัวแปร - ดังนั้นในกรณีของคุณ มันจะเกิดข้อผิดพลาดต่อไป

person alexpods    schedule 09.02.2015
comment
สุดยอด. ขอบใจนะ อเล็กซ์ ช่างเป็นช่วงเวลาที่สมองขาดสติสำหรับฉัน มีเหตุผล. 1.) จำเป็นต้องให้ผลผลิตจากภายในสิ่งที่ให้ผลผลิตได้ (เช่น ตัวสร้าง 2.) ใช้ตัวสร้างดังกล่าวในสิ่งที่สามารถดำเนินการให้คุณได้อย่างโปร่งใส (co, Task.js ฯลฯ ) - person Robert Taylor; 10.02.2015

ที่น่าสังเกตอีกอย่างคือ ... สัญญาการคืน / ใช้ร่วมเวอร์ชันใหม่แทนที่จะเป็นคำสัญญา นี่คือสิ่งที่ใช้ได้กับ 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);
});
person Robert Taylor    schedule 10.02.2015