неожиданный выход зарезервированного слова в строгом режиме? Узел v0.11, гармония, es6


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