在node.js中返回具有async/await的对象
因此,我正在使用node.js,并试图从函数中将一些数据推送到对象。所有的东西都被正则表达式正确地解析了,我想我只是不明白如何正确地实现我正在做的事情。解析游戏数据后,我对json对象没有定义在node.js中返回具有async/await的对象,node.js,async-await,Node.js,Async Await,因此,我正在使用node.js,并试图从函数中将一些数据推送到对象。所有的东西都被正则表达式正确地解析了,我想我只是不明白如何正确地实现我正在做的事情。解析游戏数据后,我对json对象没有定义 const diplo = `!report Game Type: Diplo 1: <@12321321421412421> 2: <@23423052352342334> 3: <@45346346345343453> 4: <@234234234235235
const diplo = `!report Game Type: Diplo
1: <@12321321421412421>
2: <@23423052352342334>
3: <@45346346345343453>
4: <@23423423423523523>`
var diplo_data = {players:[]};
async function gameType(game) {
let data = {};
let game_types = [{id: 1, name: 'Diplo'}, {id: 2, name: 'Always War'}, {id: 3, name: 'FFA'}
, {id: 4, name: 'No Diplo'}, {id: 5, name: 'Team'}, {id: 6, name: 'Duel'}, {id: 7, name: 'No War'}];
let o = {}
let reType = /!report Game Type:\s+?(\d|\w+)\s?(\w+\s?(\w+)?)?\n/gi
let match = reType.exec(game)
if(match[1]){
for (var j = 0; j < game_types.length; j++) {
if ((game_types[j].name).toLowerCase() === (match[1]).toLowerCase()) {
data.type = game_types[j].id;
break;
}
}
}
if(match[2]){
data.moddifier = match[2]
}
console.log(data)
await (data)
}
async function main() {
console.log("Reading diplo data...\n\r")
try {
diplo_data = await gameType(diplo)
console.log(diplo_data)
} catch (err) {
return 'No game type!';
}
}
main();
constdiplo=`!报告游戏类型:Diplo
1:
2:
三:
4: `
var diplo_data={players:[]};
异步函数游戏类型(游戏){
让数据={};
让游戏类型=[{id:1,名称:'Diplo'},{id:2,名称:'Always War'},{id:3,名称:'FFA'}
,{id:4,名字:'No Diplo'},{id:5,名字:'Team'},{id:6,名字:'Duel'},{id:7,名字:'No War'});
设o={}
让我们重新键入=/!报告游戏类型:\s+?(\d\w+)\s)(\w+\s)(\w+)?\n/gi
让match=reType.exec(游戏)
if(匹配[1]){
对于(var j=0;j
要修复代码中的错误,必须在wait(data)
之前添加return
语句:
但是主要的问题是为什么在那里使用async/await
gameType
不是异步函数,它不包含任何异步调用。应将其声明为常规同步函数:
function gameType(game) {
...
return data;
}
调用gameType
的函数main
也应该在不使用async
的情况下声明
function main() {
console.log("Reading diplo data...\n\r");
try {
diplo_data = gameType(diplo);
console.log(diplo_data);
} catch (err) {
return 'No game type!';
}
}
您必须在
wait(data)
之前添加return
语句。但主要的问题是,为什么在那里使用async/await
gameType
不是异步函数。我要将数据插入数据库,需要多次插入不同的表,因此需要将其作为事务来执行。因此异步函数是为异步代码而设计的。看起来你所有的东西都是同步的。这里不需要使用异步函数。为什么要使用async/await?我们可以使用async和await函数而不返回承诺吗?如果函数是用async
关键字声明的,它在任何情况下都会返回承诺,即使您显式地不返回结果。
function main() {
console.log("Reading diplo data...\n\r");
try {
diplo_data = gameType(diplo);
console.log(diplo_data);
} catch (err) {
return 'No game type!';
}
}