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

lul*_*ezy 1 javascript node.js typeorm

已经为此苦苦挣扎了一段时间,老实说,它让我活着,这是一个映射到 javascript 代码的打字稿代码。来源是

const connection: Connection = await createConnection();
Run Code Online (Sandbox Code Playgroud)

TypeORM转换为

const connection = yield typeorm_1.createConnection();
Run Code Online (Sandbox Code Playgroud)

这然后抛出

/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)
Run Code Online (Sandbox Code Playgroud)

我到处搜索,但我还没有找到解决方案,这让我发疯,有任何解决方案或修复或变通方法吗?我将不胜感激,提前致谢

lul*_*ezy 5

好吧,我终于发现我做错了什么。我在async调用该行的函数之前丢失了一个关键字,我要制作它,async所以它应该像这样

/*****/
async function() {
    const connection: Connection = await createConnection();
}
/****/
Run Code Online (Sandbox Code Playgroud)


Dav*_*d R 1

您需要使用生成器来解决这个问题。Co是一种流行的生成器,它将帮助您编写/执行非阻塞代码。

使用以下命令安装它

npm install co
Run Code Online (Sandbox Code Playgroud)

然后将代码包装在 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);
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!