我已经从es7到es6编译了一段javascript代码,因为我需要使用
Node.js 6.9.5
但是我在转换时遇到了这个错误:
意外标识符keyValues [key] = yield DbStorage.get(key);
我的代码如下:
getMany: function (keys) {
return new Promise((resolve, reject) => {
let keyValues = {};
for(let key of keys){
keyValues[key] = await DbStorage.get(key);
}
resolve(keyValues);
});
},
并且转换后的代码如下所示:
getMany: function (keys) {
return new Promise((resolve, reject) => {
let keyValues = {};
for (let key of keys) {
keyValues[key] = yield DbStorage.get(key);
}
resolve(keyValues);
});
},
我正在使用typescript来转换我的tsconfig.json,如下所示:
{
"allowJs" : true,
"compilerOptions": {
"target": "es6",
"sourceMap": true,
"removeComments": false,
"listFiles" : false,
"diagnostics" : false,
"outDir" : "build",
"allowJs" : true,
"inlineSourceMap" : false
},
"include" : ["collaboration/*"],
"exclude": [ "build", "node_modules" ]
}
所以这有什么不对?
答案 0 :(得分:0)
您在非await
功能中使用async
,这是不正确的。 getMany
应为async
,其中包括您不需要new Promise
:
getMany: async function (keys) {
// ^^^^^
let keyValues = {};
for (let key of keys){
keyValues[key] = await DbStorage.get(key);
}
return keyValues;
},
TypeScript编译器将错误的await
转换为错误的yield
非常奇怪,但它可能是TypeScript编译器中的边缘错误。如果您修复了使用情况,希望它能正确转换。