节点抛出意外的严格模式保留字“yield”

时间:2018-02-16 13:18:37

标签: javascript node.js typeorm

一段时间以来一直在苦苦挣扎,老实说它让我活着,这是一个打印到javascript代码的打字稿代码。来源是

const connection: Connection = await createConnection();

TypeORM转换为

const connection = yield typeorm_1.createConnection();

然后抛出

/path/to/api/build/routes/admin.js:22
        let admins = yield con.manager.find(Admin_1.Admin);
                     ^^^^^

SyntaxError: Unexpected strict mode reserved word
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:152:10)
    at Module._compile (module.js:624:28)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)
    at Module.require (module.js:604:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/home/lulliezy/Documents/Projects/blog/api/build/app.js:10:13)

我到处搜索但是我还没有找到解决方案,它驱使我疯了,任何解决方案或修复或解决这个问题?我将非常感谢,提前谢谢

3 个答案:

答案 0 :(得分:0)

您需要使用生成器来克服此问题。 Co是一种流行的生成器,它可以帮助您编写/执行非阻塞代码。

使用以下命令

安装它
npm install co

然后将您的代码包装在co中,这将防止基于关键字抛出错误。像这样,

var co = require('co');

co(function*() {
    "use strict";
     .................
     ........................
     let admins = yield con.manager.find(Admin_1.Admin);
     .................
     ........................
    return something;
}).then(function (returnVal) {
    console.log (returnVal);
}, function (e) {
    console.log(e.stack);
});

希望这有帮助!

答案 1 :(得分:0)

好的,我终于找到了我做错了什么。在我调用该行的函数之前,我错过了一个async关键字,我是为了使它成为async所以应该以某种方式进行这样的

/*****/
async function() {
    const connection: Connection = await createConnection();
}
/****/

答案 2 :(得分:0)

正如大卫正确地说的那样,在同步过程中使用异步操作中的生成器,您可以将代码重构为:

const co = require('co');

co(function*() {
    "use strict";

   /path/to/api/build/routes/admin.js:22
     let admins = yield con.manager.find(Admin_1.Admin);

注意:使用use strict模式时,请勿在{{1​​}}之外使用yield。因为它最终会再次抛出该错误。

您可能希望详细了解如何使用function*co