Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在node.js中返回具有async/await的对象_Node.js_Async Await - Fatal编程技术网

在node.js中返回具有async/await的对象

在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

因此,我正在使用node.js,并试图从函数中将一些数据推送到对象。所有的东西都被正则表达式正确地解析了,我想我只是不明白如何正确地实现我正在做的事情。解析游戏数据后,我对json对象没有定义

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!';
  }        
}